
개별 프로젝트로 사칙연산 + 가 되는 계산기 개발
Scanner 활용Scanner 활용if or switchfor or whileimport java.util.Objects;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int a = 0;
int b = 0;
int result = 0;
String c;
Scanner sc = new Scanner(System.in);
for (int i = 1; ; i++) {
System.out.printf("\n========계산 준비 완료 / 사용량 : %d회==========\n\n", i);
System.out.println("첫번째 숫자를 입력하세요");
System.out.print(": ");
while (!sc.hasNextInt()){
System.out.println("잘못된 값을 입력하였습니다. 다시 입력해주세요");
System.out.print(": ");
sc.next();
}
a = sc.nextInt();
System.out.println("두번째 숫자를 입력하세요");
System.out.print(": ");
while (!sc.hasNextInt()){
System.out.println("잘못된 값을 입력하였습니다. 다시 입력해주세요");
System.out.print(": ");
sc.next();
}
b = sc.nextInt();
System.out.println("사칙연산 기호를 입렵하세요(+, -, *, /)");
System.out.print(": ");
while(true){
c = sc.next();
if(c.equals("+") || c.equals("-") || c.equals("*") || c.equals("/")){
break;
} else{
System.out.println("잘못된 값을 입력하였습니다. 다시 입력해주세요");
System.out.print(": ");
}
}
switch (c) {
case "+":
result = a + b;
System.out.println("\n"+ a + c + b + "=" + result + "\n");
break;
case "-":
result = a - b;
System.out.println("\n"+ a + c + b + "=" + result+ "\n");
break;
case "*":
result = a * b;
System.out.println("\n"+ a + c + b + "=" + result+ "\n");
break;
case "/":
if(b == 0){
System.out.println("분모에는 0이 들어갈 수 없습니다."+ "\n");
break;
}
result = a / b;
System.out.println("\n"+ a + c + b + "=" + result);
break;
}
System.out.println("종료 하시려면 'exit'를 입력해주세요");
String out = sc.next();
if (Objects.equals(out, "exit")){
break;
}
}
}
}
System.out.println("종료 하시려면 'exit'를 입력해주세요");
String out = sc.next();
if (Objects.equals(out, "exit")){
break;
if(out == "exit") 과 if(Objects.equals(out, "exit")) 의 차이
if (out == "exit") -> 주소 비교
== 연산자는 메모리 주소를 비교out과 exit이 동일한 객체(메모리 주소)를 가리킬 때만 trueexit)은 JVM의 string Pool에 저장됨으로 ture일 가능성이 크다.But. 새로운 String exit을 생성하면 false이 됨
예시
String out1 = "exit"; // String Pool에 저장됨
String out2 = new String("exit"); // 새로운 객체 생성
System.out.println(out1 == out2); // false (참조 주소가 다름)
if(Obhects.equals(out, "exit")) -> 값 비교Objects.equals(out, "exit"은 내부적으로 out == "exit"를 먼저 체크한 후 out.equals("exit")를 실행true