이번 TIL에서는 자바로 계산기 프로그램을 작성하던 중, 양의 정수만 입력받도록 수정한 과정을 다루려 한다. 요구 사항에서 두 정수를 입력받을 때 0을 포함한 양의 정수만 받아야 하는데, 이를 놓친 부분이 있어 트러블 슈팅을 진행하였다.
계산기 프로그램에서 두 정수를 입력받는 과정에서 양의 정수만 입력받아야 한다는 요구 사항을 반영하지 않았다. 음수나 정수가 아닌 값이 입력될 경우, 프로그램이 비정상적으로 작동할 수 있었다.
Scanner
클래스의 hasNextInt()
메서드를 사용하여 정수만 입력받도록 하고, 음수가 입력되었을 때 다시 입력을 받도록 하였다. 이를 통해 입력값이 조건을 만족하지 않을 경우 즉시 오류 메시지를 출력하고, 올바른 값을 입력받을 수 있도록 하였다.
hasNextInt()
는 자바의 Scanner
클래스에서 입력 스트림에 다음에 입력될 값이 정수인지 확인할 때 사용하는 메서드이다. 즉, 사용자가 입력한 값이 정수이면 true
를 반환하고, 그렇지 않으면 false
를 반환한다.
이 메서드는 정수 입력 여부를 미리 확인할 수 있기 때문에, 잘못된 입력(예: 문자열이나 소수)을 받았을 때 예외를 발생시키지 않고, 적절한 오류 메시지를 출력하여 다시 입력을 받는 데 유용하다.
public class App {
public static void main(String[] args) {
Calculator calc = new Calculator();
Scanner sc = new Scanner(System.in);
while (true) {
int num1 = 0, num2 = 0;
// 첫 번째 숫자 입력
while (true) {
System.out.print("첫 번째 숫자를 입력하세요(0을 포함한 양의 정수): ");
if (sc.hasNextInt()) {
num1 = sc.nextInt();
if (num1 >= 0) {
break; // 양의 정수일 경우 루프 탈출
} else {
System.out.println("0 또는 양의 정수를 입력해주세요.");
}
} else {
System.out.println("잘못된 입력입니다. 정수를 입력해주세요.");
sc.next(); // 잘못된 입력 처리
}
}
// 두 번째 숫자 입력
while (true) {
System.out.print("두 번째 숫자를 입력하세요(0을 포함한 양의 정수): ");
if (sc.hasNextInt()) {
num2 = sc.nextInt();
if (num2 >= 0) {
break; // 양의 정수일 경우 루프 탈출
} else {
System.out.println("0 또는 양의 정수를 입력해주세요.");
}
} else {
System.out.println("잘못된 입력입니다. 정수를 입력해주세요.");
sc.next(); // 잘못된 입력 처리
}
}
// 이후 연산 및 계산 결과 출력
System.out.print("사칙연산 기호를 입력하세요(+, -, *, /): ");
char operator = sc.next().charAt(0);
try {
calc.setResults(num1, num2, operator);
System.out.println("결과: " + calc.getResults());
} catch (ArithmeticException e) {
System.out.println(e.getMessage());
continue;
}
// exit 입력 시 종료
System.out.println("더 계산하시겠습니까? (exit 입력 시 종료)");
String nextLine = sc.next();
if (nextLine.equals("exit")) {
System.out.println("계산기를 종료합니다.");
break;
}
}
sc.close();
}
}
hasNextInt()
사용: hasNextInt()
로 입력값이 정수인지 확인 후, 정수가 아닐 경우 오류 메시지를 출력하고 다시 입력받도록 처리하였다.if (num1 >= 0)
로 양의 정수인지 확인하고, 음수가 입력되면 다시 입력을 받도록 했다.sc.next()
를 통해 입력 버퍼를 정리하고, 유효한 입력이 들어올 때까지 반복하는 구조로 구현하였다.이번 트러블 슈팅을 통해 양의 정수만 입력받는 요구 사항을 제대로 반영할 수 있었으며, 입력값에 대한 검증을 강화하여 프로그램의 안정성을 높일 수 있었다. hasNextInt()
와 if
문을 적절히 사용하여 사용자의 잘못된 입력을 걸러내는 방식을 터득한 좋은 경험이었다.