2012-01-08 188 views
2

我正在编写命令行程序,并希望让用户输入有效的年龄(整数)。通过使用扫描仪类,我有这样的事情:检查用户是否输入整数

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

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

myScanner.next(); 

里面的else -block。

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 
} 

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