try catch 递归中的 NumberFormatException 在 2 个或更多 "mistakes" 后不起作用
NumberFormatException in try catch recursion doesn't work after 2 or more "mistakes"
所以我正在尝试编写一种方法来检查扫描仪输入是否为 int
,并循环错误消息直到用户输入 int
。只要用户不提供超过 1 个错误输入,下面的方法就可以工作。如果我键入多个字母,然后键入一个 int,程序就会崩溃。我认为这可能与我的 try catch 仅捕获 1 个异常但不确定有关,并且似乎无法使其正常工作。有谁知道我该如何解决这个问题?
调用方法:
System.out.println("Write the street number of the sender: ");
int senderStreetNumber = checkInt(sc.nextLine);
方法:
public static int checkInt (String value){
Scanner sc = new Scanner(System.in);
try{
Integer.parseInt(value);
} catch(NumberFormatException nfe) {
System.out.println("ERROR! Please enter a number.");
value = sc.nextLine();
checkInt(value);
}
int convertedValue = Integer.parseInt(value);
return convertedValue;
}
你的递归逻辑不好
让我试着解释一下你的错误...
第一次进入函数时,你“检查值是否为 int)
如果不是你递归。
可以说第二次很好。
然后你 cto 转换后的值
然后递归开始,你回到第一次进入函数的时候。
然后它再次执行转换后的值,但您没有捕获到该异常,因此您的应用程序崩溃了
像这样。没有在 IDE 中编码,只是从大脑到键盘。
希望能帮助到你。帕特里克
Scanner sc = new Scanner(System.in);
int senderStreetNumber;
boolean ok = false;
while(!ok) {
System.out.println("Write the street number of the sender: ");
try {
senderStreetNumber = Integer.parseInt(sc.nextLine());
ok = true;
} catch (NumberFormatException nfe) {
System.out.println("ERROR! Please enter a number.");
}
}
This works.., just modified your program..tested
public static int checkInt(String value) {
Scanner sc = new Scanner(System.in);
try {
return Integer.parseInt(value);
}catch (Exception e) {
System.out.println("Error please enter correct..");
value = sc.nextLine();
return checkInt(value);
}
//int convertedValue = Integer.parseInt(value);
//return convertedValue;
}
所以我正在尝试编写一种方法来检查扫描仪输入是否为 int
,并循环错误消息直到用户输入 int
。只要用户不提供超过 1 个错误输入,下面的方法就可以工作。如果我键入多个字母,然后键入一个 int,程序就会崩溃。我认为这可能与我的 try catch 仅捕获 1 个异常但不确定有关,并且似乎无法使其正常工作。有谁知道我该如何解决这个问题?
调用方法:
System.out.println("Write the street number of the sender: ");
int senderStreetNumber = checkInt(sc.nextLine);
方法:
public static int checkInt (String value){
Scanner sc = new Scanner(System.in);
try{
Integer.parseInt(value);
} catch(NumberFormatException nfe) {
System.out.println("ERROR! Please enter a number.");
value = sc.nextLine();
checkInt(value);
}
int convertedValue = Integer.parseInt(value);
return convertedValue;
}
你的递归逻辑不好
让我试着解释一下你的错误...
第一次进入函数时,你“检查值是否为 int) 如果不是你递归。 可以说第二次很好。 然后你 cto 转换后的值 然后递归开始,你回到第一次进入函数的时候。 然后它再次执行转换后的值,但您没有捕获到该异常,因此您的应用程序崩溃了
像这样。没有在 IDE 中编码,只是从大脑到键盘。 希望能帮助到你。帕特里克
Scanner sc = new Scanner(System.in);
int senderStreetNumber;
boolean ok = false;
while(!ok) {
System.out.println("Write the street number of the sender: ");
try {
senderStreetNumber = Integer.parseInt(sc.nextLine());
ok = true;
} catch (NumberFormatException nfe) {
System.out.println("ERROR! Please enter a number.");
}
}
This works.., just modified your program..tested
public static int checkInt(String value) {
Scanner sc = new Scanner(System.in);
try {
return Integer.parseInt(value);
}catch (Exception e) {
System.out.println("Error please enter correct..");
value = sc.nextLine();
return checkInt(value);
}
//int convertedValue = Integer.parseInt(value);
//return convertedValue;
}