Project
[Project]Calculator_1
높하늬바람
2025. 5. 13. 17:39
개별 프로젝트로 사칙연산 + $a$ 가 되는 계산기 개발
최소 사칙연산이 가능할것
- $+$ , $-$ , $*$ , $/$ + $a$
양의 정수(0 포함)을 입력 받기
Scanner
활용- 양의 정수는 각각 하나씩 전달 받을것
연산 기호 입력받기
Scanner
활용
입력받은 정수 2개와 연산를 활용해 연산 후 결과값 출력
if
orswitch
- 제어문 사용
- 연산 오류가 발생할 경우 해당 오류에 대해 출력
ex) 나눗셈 연산에서 분모에 0이 입력될 수 없습니다.
반복문을 사용하되, 반복 종료를 알려주는 'exit'문자열을 입력하기 전까지 무한으로 계산 진행
for
orwhile
import 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
이 동일한 객체(메모리 주소)를 가리킬 때만true
문자열 리터럴(
exit
)은 JVM의 string Pool에 저장됨으로ture
일 가능성이 크다.But. 새로운
String exit
을 생성하면false
이 됨예시
String out1 = "exit"; // String Pool에 저장됨 String out2 = new String("exit"); // 새로운 객체 생성
System.out.println(out1 == out2); // false (참조 주소가 다름)
2. `if(Obhects.equals(out, "exit"))` -> 값 비교
1. `Objects.equals(out, "exit"`은 내부적으로 `out == "exit"`를 먼저 체크한 후 `out.equals("exit")`를 실행
2. 값 자체가 동일하면 `true`