问答详情
源自:7-1 简易扑克牌游戏

关于输入判断问题,请指导

在创建用户的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循环外当出现异常时就不再接受新的输入了。


提问者:夜海风 2015-05-06 23:31

个回答

  • viva_la_vida
    2015-05-07 00:15:53

    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 是空的