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;
    }