我正在编写命令行程序,并希望让用户输入有效年龄(整数)。通过使用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;
}
问题在于,在循环中它不停地读取输入而不等待新值。我怎么能绕过这个?
答案 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 ......只是想展示一种替代方法。)