检查用户是否输入了整数

时间:2012-01-08 18:49:30

标签: java

我正在编写命令行程序,并希望让用户输入有效年龄(整数)。通过使用Scanner类,我有类似的东西:

int getAge() {
   Scanner = new Scanner(System.in);
   int age;
   boolean isValid = false;

   while(!isValid) {
      System.out.println("Please enter your age");
      if (myScanner.hasNext()) {
        if (myScanner.hasNextInt()) {
           age = myScanner.nextInt();
           isValid = true;
        } else {
           System.out.println("Please enter an integer");
        }
      }
   }

   return age;
} 

问题在于,在循环中它不停地读取输入而不等待新值。我怎么能绕过这个?

2 个答案:

答案 0 :(得分:2)

您没有在else路径中读取任何令牌,因此反复处理相同的输入。只需添加以下行

即可
myScanner.next();

else - 阻止。

答案 1 :(得分:0)

你也可以使用这样的东西。要使用BufferedReader读取整行,然后解析字符串中的整数并捕获可能发生的任何异常。

InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
String s = br.readLine();
int intVal;
try {
  intVal = Integer.parseInt(s);
}
catch(NumberFormatException nfe) {
  //Do Something
}

你可以将它放在循环中。 (是的,我意识到它不使用Scanner ......只是想展示一种替代方法。)