문제
1. 양의 정수(0포함)를 입력받기
2. 사칙연산기호(+,-,*,/)를 입력 받기
3. 위에서 입력받은 양의 정수 2개와 사칙연산 기호를 사용하여 연산을 진행한 후 결과값을 출력하기
4. 반복문을 사용하되, 반복의 종료를 알려주는 "exit" 문자열을 입력하기 전까지 무한으로 계산을 진행할 수 있도록 소스 코드를 수정하기
✅ 1. 양의 정수(0포함)를 입력받기
scanner 클래스를 이용하여 첫번째 숫자와 두번째 숫자를 입력 받는다.
import java.util.Scanner;
Scanner sc = new Scanner(System.in);
System.out.println("숫자를 입력하세요(ex)5 4)");
int firstNumber = sc.nextInt();
int secondNumber = sc.nextInt();
✅ 2. 사칙연산기호(+ , - , * , / )를 입력 받기
scanner 의 문자열을 입력받는 메소드를 이용하여 연산자를 입력받는다
System.out.println("사칙연산자를 입력하세요(ex)+)");
char operator = sc.next().charAt(0);
✅ 3. 위에서 입력받은 양의 정수 2개와 사칙연산 기호를 사용하여 연산을 진행한 후 결과값을 출력하기
if (operator == '+') {
result = firstNumber + secondNumber;
} else if (operator == '-') {
result = firstNumber - secondNumber;
} else if (operator == '*') {
result = firstNumber * secondNumber;
} else if (operator == '/') {
result = firstNumber / secondNumber;
}
System.out.println("값="+result);
✅ 4. 반복문을 사용하되, 반복의 종료를 알려주는 "exit" 문자열을 입력하기 전까지 무한으로 계산을 진행할 수 있도록 소스 코드를 수정하기(전체코드)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(true) {
int result = 0;
System.out.println("첫번째 숫자를 입력하세요");
int firstNumber = sc.nextInt();
System.out.println("두번째 숫자를 입력하세요");
int secondNumber = sc.nextInt();
System.out.println("사칙연산자를 입력하세요");
char operator = sc.next().charAt(0);
sc.nextLine();
if (operator == '+') {
result = firstNumber + secondNumber;
} else if (operator == '-') {
result = firstNumber - secondNumber;
} else if (operator == '*') {
result = firstNumber * secondNumber;
} else if (operator == '/') {
result = firstNumber / secondNumber;
}
System.out.println("값="+result);
System.out.println("1.계속하기(아무키나 입력) 2.종료(exit 입력)");
String input = sc.nextLine();
if(input.equals("exit")) {
break;
}
}
sc.close();
}
}
콘솔 실행 화면

⚠️ ⚠️ ⚠️ 어라라!!!! ⚠️ ⚠️ ⚠️

값 출력후 계속할지 종료할지 입력을 받아야하는데 숫자를 입력하는 코드가 시작된다.
왜 이런거지....
빈문자를 입력받는거 같은데 원인이 뭔지 고민해보았다.
scanner 쪽 문제인거 같은데.....흠
문제는 입력 처리 방식에 있었다.
int secondNumber = sc.nextInt(); 에서 문제가 발생했는데 nextInt() 의 값을 입력하고 엔터를 누르면 공백을 기준으로 그 앞의 값을 인식한다.
그런데 String input = sc.next(); 이 코드 입장에선 엔터키를 입력으로 인식 받기 때문에 엔터키 자리를 공백으로 채워줘야 한다.
이를 해결하기 위해
next() 호출 후에 nextLine()을 추가하여 입력 버퍼를 비워주니 정상으로 작동하였다!!!
char operator = sc.next().charAt(0);
sc.nextLine();

다음은 응용으로 클래스도 적용하여 구현해보자.
'TIL' 카테고리의 다른 글
[TIL]키오스크 만들기(2025-03-14) (0) | 2025.03.14 |
---|---|
[TIL]키오스크 만들기(2025-03-12) (1) | 2025.03.12 |
[TIL]키오스크 만들기(2025-03-10) (0) | 2025.03.10 |
[TIL]Lv3 계산기 만들기(2025-02-28) (0) | 2025.02.28 |
[TIL]Lv2 계산기 만들기(2025-02-26) (0) | 2025.02.26 |