为了账号安全,请及时绑定邮箱和手机立即绑定

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

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


正在回答

1 回答

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

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Java入门第三季
  • 参与学习       409792    人
  • 解答问题       4340    个

Java中你必须懂得常用技能,不容错过的精彩,快来加入吧

进入课程

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信