2

我在将非整数输入整数字段时遇到问题。我只是采取预防措施,以便如果其他人使用/在我的程序上工作,他们不会得到这个InputMismatchException

当我在变量中输入非数字字符时input,出现上述错误。有什么方法可以弥补这一点,就像NullPointerException在字符串方面可以做的那样?

编辑此代码只是为了包含导致问题的相关部分。

import java.util.Scanner;

class MyWorld {

public static void main(String[] args) {

   Scanner user_input = new Scanner(System.in);

   int input = 0;   

   System.out.println("What is your age? : ");
   input = user_input.nextInt();
   System.out.println("You are: " +input+ " years old");

  }

}
4

5 回答 5

2

您可以使用 if 语句来检查是否 user_input hasNextInt()。如果输入是整数,则设置input等于user_input.nextInt()​​ 。否则,显示一条消息,说明输入无效。这应该防止异常。

System.out.println("What is your age? : ");
if(user_input.hasNextInt()) {
    input = user_input.nextInt();
}
else {
    System.out.println("That is not an integer.");
}

以下是有关JavadocshasNextInt()的更多信息。

附带说明一下,Java 中的变量名应遵循lowerMixedCase约定。例如,user_input应更改为userInput.

于 2015-08-27T21:31:08.277 回答
0

这是一个 try-catch 块。如果您想确保不使程序流停止,则需要使用它。

try { 
  input = user_input.nextInt();
}
catch (InputMismatchException exception) { //here you can catch that exception, so program will not stop
  System.out.println("Integers only, please."); //this is a comment
  scanner.nextLine(); //gives a possibility to try giving an input again
}
于 2015-08-27T21:11:52.640 回答
0

您可以添加一个try-catch块:

import java.util.Scanner;

class MyWorld {

public static void main(String[] args) {

   Scanner user_input = new Scanner(System.in);

   int input = 0;   

   System.out.println("What is your age? : ");

   try{
       input = user_input.nextInt();
   }catch(InputMisMatchException ex)
       System.out.println("An error ocurred");
   }

   System.out.println("You are: " +input+ " years old");

  }
}

如果您想让用户输入另一个int,您可以创建一个布尔变量并创建一个do-while循环来重复它。如下:

boolean end = false;

//code

do
{
   try{
       input = user_input.nextInt();
       end = true;
   }catch(InputMisMatchException ex)
       System.out.println("An error ocurred");
       end = false;
       System.out.println("Try again");
       input.nextLine();
   }
}while(end == false);
于 2015-08-27T21:12:04.717 回答
0

测试使用hasNextInt().

Scanner user_input = new Scanner(System.in);
System.out.println("What is your age?");
if (user_input.hasNextInt()) {
    int input = user_input.nextInt();
    System.out.println("You are " + input + " years old");
} else {
    System.out.println("You are a baby");
}
于 2015-08-27T21:28:44.420 回答
-1

使用Scanner's next()方法获取数据,而不是使用 nextInt()。int input = Integer.parseInt(inputString); 然后使用parseInt() 方法将其解析为整数,NumberFormatException如果它不是 int,则可以相应地处理。

于 2015-08-27T21:12:34.057 回答