夜海风
2015-05-06 23:31
在创建用户的playerCreate方法中在接受用户ID的输入时我想实现判断用户输入的ID是否为大于0的整数,如果输入的ID是非整型或者小于0时则抛出"请输入一个正整数ID值:"的异常提示,并等待用户重新输入。
如果我用这样一段代码:
System.out.println("请输入第"+index+"名玩家ID:");
while (ID<0) {
try {
ID = scanner.nextInt();
} catch (Exception e) {
System.out.println("请输入一个正整数ID值:");
}
}其中scanner是定义好的变量Scanner scanner=new Scanner(System.in),但是在执行时当输入非法字符时出现如下情况:
请输入第1名玩家ID:
a
请输入一个正整数ID值:
请输入一个正整数ID值:
请输入一个正整数ID值:
请输入一个正整数ID值:
请输入一个正整数ID值:
请输入一个正整数ID值:
程序会不断的抛出异常提示,而不再中断接受新的输入,而用如下代码
do {
try {
scanner = new Scanner(System.in);
ID = scanner.nextInt();
if(ID<0){
System.out.println("请输入一个正整数ID值:");
}
} catch (Exception e) {
System.out.println("请输入一个正整数ID值:");
}
} while (ID<0);
即把scanner的赋值放到try结构(只要是while结构内都行)内了,程序执行就正常了,请问一下为什么scanner的赋值在try结构内和在while循环外对程序的执行到底产生了什么影响,为什么在while循环外当出现异常时就不再接受新的输入了。
String java.util.Scanner.next(Pattern pattern)
Returns the next token if it matches the specified pattern. This method may block while waiting for input to scan, even if a previous invocation of hasNext(Pattern) returned true. If the match is successful, the scanner advances past the input that matched the pattern.
另外你在try 里面 scanner每次都创建了新的对象,自然之前的buffer 是空的
Java入门第三季
409792 学习 · 4340 问题
相似问题