티스토리 뷰

반응형
package prj190628;

import java.util.*;
public class test_1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		System.out.print("첫번째 숫자 입력하세요>>>>>>>>");
		
		Scanner scan = new Scanner(System.in); //입력받을 scan 생성
		String tmp = scan.nextLine(); // tmp 생성
		
		int first_num = Integer.parseInt(tmp); //처음 숫자 저장
		int second_num = 0; //두번째 숫자 변수 초기에 생성
		char op =' '; //연산자 변수 초기 생성
			
	
   //////////////////////////////////////////do while		
		do {
			switch(op) {
			case '+' : 
				System.out.printf("%d %c %d = %d", first_num, op, second_num, first_num+second_num);
			    break;
			case '-' : 
				System.out.printf("%d %c %d = %d", first_num, op, second_num, first_num-second_num);
			    break;
			case '*' : 
				System.out.printf("%d %c %d = %d", first_num, op, second_num, first_num*second_num);
				break;
			case '/' : 
				System.out.printf("%d %c %d = %d", first_num, op, second_num, first_num/second_num);
				break;
			case '%' : 
				System.out.printf("%d %c %d = %d", first_num, op, second_num, first_num%second_num);
				break;
			}//case end
			break;
		}while(first_num!=0); //do while end

///////////////////////////////////////while
		while(first_num!=0) {	
				switch(op) {
					case '+' : 
						System.out.printf("%d %c %d = %d", first_num, op, second_num, first_num+second_num);
					    break;
					case '-' : 
						System.out.printf("%d %c %d = %d", first_num, op, second_num, first_num-second_num);
					    break;
					case '*' : 
						System.out.printf("%d %c %d = %d", first_num, op, second_num, first_num*second_num);
						break;
					case '/' : 
						System.out.printf("%d %c %d = %d", first_num, op, second_num, first_num/second_num);
						break;
					case '%' : 
						System.out.printf("%d %c %d = %d", first_num, op, second_num, first_num%second_num);
						break;
				} //switch end
				break;
		}//while end

    
 ///////////////////////////////////////if		   
    
		if(first_num != 0) {//조건은 0이 입력되면 종료 이므로 0이 아닐때 아래 구문 실시
			
			System.out.print("두번째 숫자 입력하세요>>>>>>>>>");
			String tmp_1 = scan.nextLine(); //기존 scan을 활용해서 tmp_1 에 두번째 숫자 저장
			second_num = Integer.parseInt(tmp_1); //string 으로 받은 숫자를 int 형 변환
			
			System.out.print("원하는 연산자 입력하세요>>>>>>>>>"); 
			
			op = scan.next().charAt(0); //연산자는 한글자이기 때문에 char형으로 받는다
            									//스캔함수명.next().charAt(인덱스넘버);
                                                //첫 글자 char형 op에 넣겠다는것.
			
			switch(op) {//op에 저장된 연산자에 따라 연산 해야 하기 때문에 switch 문으로
				case '+' : 
					System.out.printf("%d %c %d = %d", first_num, op, second_num, first_num+second_num);
				    break;
				case '-' : 
					System.out.printf("%d %c %d = %d", first_num, op, second_num, first_num-second_num);
				    break;
				case '*' : 
					System.out.printf("%d %c %d = %d", first_num, op, second_num, first_num*second_num);
					break;
				case '/' : 
					System.out.printf("%d %c %d = %d", first_num, op, second_num, first_num/second_num);
					break;
				case '%' : 
					System.out.printf("%d %c %d = %d", first_num, op, second_num, first_num%second_num);
					break;
			} //switch end
			
		}//if end
		else if(first_num==0) System.out.println("0 입력으로 인한 종료");
        //0이 아닐때 실행되는 조건이기때문에 0입력하면 종료 문구 띄울것.		
	}//main end

}//class end

=====================남의 코드

		Scanner scanner = new Scanner(System.in);
		char str='a';
		do {
			int n1 = Integer.parseInt(scanner.next());
			int n2 = Integer.parseInt(scanner.next());
			str=scanner.next().charAt(0);
			boolean b=false;
			int t=0;
			float t2=2;
			switch (str) {
			case '+':
				t=n1+n2;
				break;
			case '-':
				t=n1-n2;
				break;
			case '/':
				t=n1/n2;
				if (n1<n2) {
					t2=(float)n1/n2;
				}	
				break;
			case '*':
				t=n1*n2;
				break;
			case '%':
				t=n1%n2;
				break;
			default:
				b=true;
				break;
			}
			if (b==true) {
				break;
			}
			if (t2<1) {
				System.out.printf("%d%s%d=%f",n1,str,n2,t2);
			}else {
				System.out.printf("%d%s%d=%d\n",n1,str,n2,t);
			}
		} while (str!='0');	
		System.out.println("종료");

수업 중 공유 받은 코드 do while문인데

어딘가 묘하게 이상하다.

 

결과물은 동일하다. 근데..

do while문의 특성상 무조건 한 번은 실행 되기 때문에, 

저 코드는 첫 숫자에 0이 들어가도 무조건 실행된다. 

그런데 나는 그러고 싶지 않았다는게 문제. 

 

Scanner scanner = new Scanner(System.in);
		
	char str='a';
		
	do {
		boolean b = false;
		
		System.out.print("첫 번째 숫자 입력 : ");
		int n1 = Integer.parseInt(scanner.next());
		if(n1==0) break;
			
		System.out.print("두 번째 숫자 입력 : ");
		int n2 = Integer.parseInt(scanner.next());
			
		System.out.print("연산자 입력 : ");
		str=scanner.next().charAt(0);
										
		int t=0;
		float t2=2;
				
		switch (str) {
			case '+':
				t=n1+n2;
				b = true;
				break;
			case '-':
				t=n1-n2;
				b = true;
				break;
			case '/':
				t=n1/n2;
				b = true;
				if (n1<n2) t2=(float)n1/n2;	
				break;
			case '*':
				t=n1*n2;
				b = true;
				break;
			case '%':
				t=n1%n2;
				b = true;
				break;
		}
        
	if (t2<1) System.out.printf("%d%s%d=%f",n1,str,n2,t2);
   	 else System.out.printf("%d%s%d=%d\n",n1,str,n2,t);
    
	if(b==true) break;
    
} while (str!='0');	
	
System.out.println("종료");

그래 이거지

 

1. 아무것도 나오지 않는 콘솔창에 글씨라도 써줘야 내가 뭘해야하는 지 알겠지

2. if문을 안쓰고 해보려고 했는데 도저히 안되겠어서 if문 씀. do while을 깰 좋은 방법이 있을까? 
  사실 거대한 if문으로 do while을 제어 하면 되는것이지만..

3. 첫 숫자가 0이 면 바로 do while문을 깨고 나가 종료가 찍히게 만들었다. 

4. 나는 case문에 바로 찍히게 두었지만, 이 사람은 실제로 case문에선 연산만, 나머지는 case문 벗어난 곳에서 출력

   이 쪽이 더 효율적인 것 같기도. 수식만 쓰면 되는데, case에서 출력까지 하니 코드가 지저분해 보인다. 

 

반응형

'JAVA' 카테고리의 다른 글

190628 배열 연습  (0) 2019.06.28
190628 반복문 연습  (0) 2019.06.28
190627 배열 값 셔플  (0) 2019.06.27
190627 배열 sum,avg, max, min 구하기  (0) 2019.06.27
190627 배열 복사 연습  (0) 2019.06.27