-계산기 예제(switch문)

		Scanner scan = new Scanner(System.in);
		//변수 선언
		
		int num1 = 0, num2 = 0, result = 0;
		String op = null;//연산자(+, -, *, /, %)
		
		//타이틀 출력
		System.out.println("*** 계산기 ***");
		System.out.print("수 1 : ");
		num1 = scan.nextInt();
		System.out.print("수 2 : ");
		num2 = scan.nextInt();
		System.out.print("연산 : ");
		//문자열 입력 처리
		op = scan.next();//scan.nextLine();

		switch(op) {//특정 case까지 점프할 수 있도록 해줌
		case "+":
			result = num1 + num2;
			break;//각 case별로 분리
		case "-":
			result = num1 - num2;
			break;
		case "*":
			result = num1 * num2;
			break;
		case "/":
			result = num1 / num2;
			break;
		case "%":
			result = num1 % num2;
			break;
		default:
			System.out.println("잘못된 연산자 입력!");
			result = 0;	//생략해도 됨
			break;
		}//switch 끝
        
		System.out.println("계산 결과 : " + result);        

입력한 연산 문자로 분리. 숫자일 경우에 그냥 사용하는데 문자일 경우에는 ""을 사용해준다.

계산기의 경우에는 break을 꼭 해주어야한다.

원하는 연산결과만 실행해야하는데 break을 하지않으면 모든 연산을 실행하기 때문이다.

 

-메모리 구조

scan 받은 값은 미리 입력한 데이터와 주소가 다르다. 표면적으로는 같을 수 있지만 컴퓨터는 주소값을 읽기때문에 다른 값이다.

switch문을 if문으로 변환할 때의 주의사항은 문자열의 비교(String)이다.

비교연산자(==)를 사용하면 안된다. 

비교연산자는 주소값을 비교해주므로 scan된 데이터를 비교하기에는 부적합하다.

따라서 scan 데이터와 기존에 입력된 데이터를 비교하기 위해서는 .equals을 사용해야한다.

 

-입력된 'abc'와 scan받은 'abc'를 비교하는 예제

Scanner scan = new Scanner(System.in);
		
		String str1 = "abc";
		String str2 = "abc";
        
        if(str1 == str2) {
			System.out.println("같다.");
		}
		else {
			System.out.println("같지않다.");
		}
		
		str2 = scan.next();//abc 입력
		
		if(str1 == str2) {
			System.out.println("같다.");
		}
		else {
			System.out.println("같지않다.");
		}

str1과 str2에 입력한 abc는 주소값이 같기 때문에 비교연산자를 사용해서 비교했을 때 "같다."의 결과가 나온다.

하지만 str2에 scan으로 abc를 입력했을 때는 다른 주소값이 입력되기 때문에 "같지않다."의 결과가 나온다.

 

-.equals 사용방법 3가지

문자열변수.equals("비교문자열");
문자열변수1.equals("비교문자열변수2");
"비교문자열".equals(문자열변수);

 

-계산기 예제(switch문 -> if문)

if(op.equals("+")) {
result = num1 + num2;
		}
else if(op.equals("-")) {
result = num1 - num2;
		}
else if(op.equals("*")) {
result = num1 * num2;
		}
else if(op.equals("/")) {
result = num1 / num2;
		}
else if(op.equals("%")) {
result = num1 % num2;
		}
else {
	System.out.println("잘못된 연산자 입력!");
	result = 0;
		}

비교연산자 대신 .equals를 사용해서 비교해준다.

+, -, *, /, % 이외의 나머지 연산자 입력 시 "잘못된 연산자 입력!"이 나오기때문에 결과값을 else로 묶어준다.

+ Recent posts