int salary = 0;
while(true) {
System.out.print("11. 급여를 입력하세요(협의시 엔터):");
salary = sc.nextInt();
try {
RecruitDto.setSalary(salary);
break;
} catch(InputMismatchException e) {
System.out.println("문자는 입력이 불가합니다. 숫자나 엔터를 누르세요.");
}
}
해당 코드에서 try catch로 예외처리 했는데도 해당 오류가 뜨는 문제가 있음
Exception in thread "main" java.util.InputMismatchException
at java.base/java.util.Scanner.throwFor(Scanner.java:939)
at java.base/java.util.Scanner.next(Scanner.java:1594)
at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
at controller.hssController.HssComanyCtrl.writeRecruit(HssComanyCtrl.java:337)
at controller.hssController.HssComanyCtrl.companyMenu(HssComanyCtrl.java:56)
at controller.hssController.HssComanyCtrl.login(HssComanyCtrl.java:201)
at main.Main.main(Main.java:49)
InputMismatchException = 정수가 아닌 문자열을 입력하거나 정수 범위를 벗어난 값을 입력하면 이 예외가 발생함.
nextInt() 메서드를 호출하기 전에 이미 사용자 입력이 문자열로 변환됨->
예외가 발생하기 전에 이미 Scanner 클래스의 내부에서 예외 처리
InputMismatchException을 처리하는 대신 nextInt() 호출 이전에 입력값이 정수인지 확인하고 처리 => Scanner 클래스의 hasNextInt() 메서드를 사용하여 입력이 정수인지 확인하고 처리
int salary = 0;
while(true) {
System.out.print("11. 급여를 입력하세요(협의시 엔터):");
if (sc.hasNextInt()) {
salary = sc.nextInt();
RecruitDto.setSalary(salary);
break;
} else {
sc.next(); // 잘못된 입력값을 버림
System.out.println("올바른 숫자 형식이 아닙니다. 다시 입력하세요.");
}
}
int salary = 0;
while(true) {
System.out.print("11. 급여를 입력하세요(협의시 엔터):");
String input = sc.nextLine();
if (!input.isEmpty()) {
try {
salary = Integer.parseInt(input);
RecruitDto.setSalary(salary);
break;
} catch(NumberFormatException e) {
System.out.println("올바른 숫자 형식이 아닙니다. 다시 입력하세요.");
}
} else {
// 협의시 엔터인 경우에 대한 처리
RecruitDto.setSalary(0); // 협의시 엔터인 경우에는 0으로 설정하거나 다른 처리
break;
}
}