JAVA中Scanner类的nextInt方法在接受异常输入时如何提示重新输入

请问下面代码的问题在哪里,第一个nextInt()在获取到一个字符输入后捕获一个异常之后会不断地打印“请输入一个正整数ID值:”,而不再执行try中的ID=scanner... 请问下面代码的问题在哪里,第一个nextInt()在获取到一个字符输入后捕获一个异常之后会不断地打印“请输入一个正整数ID值:”,而不再执行try中的ID = scanner.nextInt();语句。
System.out.println("请输入第"+index+"名玩家ID:");
while (ID<0) {
try {
ID = scanner.nextInt();
} catch (Exception e) {
System.out.println("请输入一个正整数ID值:");
}
}
System.out.println("请输入第"+index+"名玩家姓名:");
while (name.length()==0){
try {
name = scanner.nextLine().trim();
} catch (Exception e){
System.out.println("请输入玩家姓名:");
}
}

输出如下:
请输入第1名玩家ID:
a
请输入一个正整数ID值:
请输入一个正整数ID值:
请输入一个正整数ID值:
请输入一个正整数ID值:
请输入一个正整数ID值:
请输入一个正整数ID值:
展开
 我来答
peterzhou1652
2017-11-11 · TA获得超过112个赞
知道答主
回答量:65
采纳率:0%
帮助的人:40.3万
展开全部
这个问题的原因在于之前建立的Scanner类对象的nextInt()接收的非整型值没有被释放,除了被try catch语句块捕获输入不匹配异常并进行循环外,因在第二次循环时,没有新建新的Scanner类对象,导致原Scanner类对象的nextInt()接收的非整型值被直接赋予给了ID变量,所以导致出现死循环,所以这个问题的主要原因不是出在循环体上,而是出现在新建Scanner类对象上,只要在
try {
ID = scanner.nextInt();
} catch (Exception e) {
System.out.println("请输入一个正整数ID值:");
}

中的 ID = scanner.nextInt();之前加一个新建Scanner类对象,就能把问题解决:
try {
Scanner scanner = new Scanner();
ID = scanner.nextInt();
} catch (Exception e) {
System.out.println("请输入一个正整数ID值:");
}
w413749250
推荐于2017-10-25 · TA获得超过364个赞
知道小有建树答主
回答量:401
采纳率:60%
帮助的人:214万
展开全部

不要用while啊

int index =1;
System.out.println("请输入第"+index+"名玩家ID:");
Scanner sc = new Scanner(System.in);
int Id = sc.nextInt();
while(Id <0){
    System.out.println("不要开玩笑了,请输入一个正整数ID值:");
    Scanner sc1 = new Scanner(System.in);
    Id = sc1.nextInt();
}

//这是一个人的  如果你要输入多个人的  在外面套一层循环
List<Integer> list = new ArrayList<Integer>();
for(int i=0;i<几个人?;i++){
    System.out.println("请输入第"+index+"名玩家ID:");
    Scanner sc = new Scanner(System.in);
    int Id = sc.nextInt();
    while(Id <0){
        System.out.println("不要开玩笑了,请输入一个正整数ID值:")
        Scanner sc = new Scanner(System.in);
        Id = sc.nextInt();
    }
    list.add(Id);
}
//输出全部Id
for(Integer id : list){
    System.out.println("Id有:"+id);
}
追问
这个不行,你这个如果输入的不是整数,是字符就直接异常退出了
追答
int index =1;
    System.out.println("请输入第"+index+"名玩家ID:");
    Scanner sc ;
    int Id=0;
    while(true) {
    try {
    sc = new Scanner(System.in);
      Id = sc.nextInt();
      break;
  } catch (Exception e) {
  System.out.println("不要开玩笑了,请输入一个正整数ID值:");
           
  }
  System.out.println("输入的id 是:" + Id);
}

 

 

//修改后的  多人的你自己在捉摸下吧

没看了???现在正确

System.out.println("-----------------------多人");
     int n =5;//n个人的
     for (int i = 1; i <= n; i++) {
     System.out.println("请输入第"+i+"名玩家ID:");
         Scanner sc1 ;
         int Id1=0;
         while(true) {
          try {
           sc1 = new Scanner(System.in);
              Id1 = sc1.nextInt();
              break;
         } catch (Exception e) {
         System.out.println("不要开玩笑了,请输入一个正整数ID值:");
                 
         }
     }
         System.out.println("第" + i + "个人的Id是:" + Id1);
}
System.out.println("输入结束");
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yj83855039
2015-05-06 · TA获得超过590个赞
知道小有建树答主
回答量:985
采纳率:33%
帮助的人:491万
展开全部
catch (Exception e) {
        System.out.println("请输入一个正整数ID值:");
        ID = scanner.nextInt();
    }

这么写呢

更多追问追答
追问
不行,直接报异常了

请输入第1名玩家ID:
a
请输入一个正整数ID值:
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)

……
追答
那就只能不用try catch了,这是个死循环,可以用正则去判断输入的是不是合法
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ciciqf
2017-10-25
知道答主
回答量:1
采纳率:0%
帮助的人:940
展开全部
在catch里面重置一下sc = new Scanner(System.in),就不会死循环了,刚遇到同样的问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式