✅ 클래스 없이 기본적인 연산을 수행할 수 있는 계산기 만들기
1. 양의 정수(0포함) 2개를 입력받기
2. 사칙연산 기호를 입력받기
3. 결과값 출력하기(연산 오류가 발생할 경우 해당 오류에 대한 내용을 정제하여 출력하기)
4. "exit" 문자열을 입력하기 전까지 무한으로 계산을 진행할 수 있도록 하기
package Lv1;
import java.util.InputMismatchException;
import java.util.Scanner;
public class Lv1App {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int num1 = 0;
int num2 = 0;
while(true) {
while (true) {// break;로 빠져나오기 전까지 계속 반복
try {
System.out.print("첫 번째 숫자를 입력하세요: ");
num1 = scanner.nextInt(); // 첫 번째 숫자 입력
System.out.print("두 번째 숫자를 입력하세요: ");
num2 = scanner.nextInt();
break;// 두 번째 숫자 입력 \
} catch (InputMismatchException e) {
System.out.println("정수만 입력 가능합니다. 다시 입력해주세요.");
scanner.nextLine(); // nextLine()을 써줘야 버퍼에 남아있는 값을 없애기 때문에 사용
}
}
System.out.print("사칙연산 기호를 입력하세요('+, -, *, /'): ");
char operator = scanner.next().charAt(0); // 사칙연산 기호 입력
// 사칙연산 이외의 값 입력시 실행
if (operator != '+' && operator != '-' && operator != '*' && operator != '/') {
System.out.print("사칙연산 기호만 입력 가능합니다. 다시 입력해주세요. : ");
operator = scanner.next().charAt(0);
}
int result = 0; // 결과 변수 생성
// 두 정수 연산
if (num2 == 0 && operator == '/') {
System.out.println("나눗셈 연산에서 분모(두번째 정수)에 0이 입력될 수 없습니다.");
// 두 번째 숫자가 0 이고 사칙연산 기호가 / 일 때 계산할 수 없으므로 '입력 될 수 없다'을 출력
} else {
if (operator == '+') {
result = num1 + num2; // 사칙연산 기호가 + 일 때 덧셈
} else if (operator == '-') {
result = num1 - num2; // 사칙연산 기호가 - 일 때 덧셈
} else if (operator == '*') {
result = num1 * num2; // 사칙연산 기호가 * 일 때 덧셈
} else if (operator == '/') {
result = num1 / num2; // 사칙연산 기호가 / 일 때 덧셈
}
System.out.println("결과: " + result); // 연산 결과 출력
}
System.out.println("더 계산하시겠습니까? (exit 입력 시 종료)");
String stop = scanner.next();
if(stop.equals("exit")){
break; // exit 입력 시 연산 종료
}
}
}
}
사칙 연산 기호 입력 시 nextLine()을 썼을 때 입력을 받지 않고 프로그램이 종료되는 것
숫자를 입력하고 엔터를 쳤을 때 버퍼에는
숫자\n가 존재하기 하는데nextint가 버퍼의 내용을 가져올 때 개행문자를 무시하고 가져오기 때문에 숫자만 가져오게 된다 그러면 버퍼에는\n이 남아있는데nextline은 공백문자, 개행문자를 포함시키기 때문에\n만 가져오고 프로그램이 종료되는 것이다.
nextLine()을 next()로 바꿔주면 된다.
코드를 작성하기 전에는
nextLine()과next()의 차이를 잘 몰랐는데 문제 상황이 생기고 나서 직접 찾아보며 정확히 이해하게 되었다. 문제를 해결하는 과정에서 어떤 부분이 잘못되었는지를 파악할 수 있었고 그 덕분에 코드 작성 방식에 대해서도 더 깊이 있게 알게 되었다.