有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java:nextInt()验证不起作用

我不是Java专家,我有一个问题。我使用扫描仪从键盘获取数据,但在将数据注册到阵列之前,我必须进行两次验证。一个是,数据不必是字符串,我使用!in.hastNextInt()来验证Scanner实例,另一个是数据不必是0。我使用的代码是下一个:

    Scanner in = new Scanner(System.in);
    int chain [] = new int [10];

    System.out.println("Welcome, please enter the values for the array: ");
    for(int x = 0;x < chain.length; x++) {
       System.out.print((x+1) +": ");
       while(!in.hasNextInt() || in.nextInt()==0) {
           System.out.print("This app doesn't accept letters, symbols or zeros: ");
           in.next();
       }
       chain[x] = in.nextInt();
    }

不幸的是,当我运行程序时,它会对每个语句询问两次,例如,对数组的每个位置0询问两次,对数组的每个位置1询问两次

有人知道发生了什么吗? 它与!in.hasNextInt()完美结合,但当我使用in.nextInt()==0时,或者当我仅使用in.nextInt()==0时,就会出现这个问题

我的错误是什么?您建议我对代码进行哪些更改以使其正常工作。 谢谢你的帮助

提前谢谢

正如@Andreas在他的回答中所说,我必须更改代码,新的好代码是:

for(int x = 0;x < chain; x++) {
   System.out.print((x+1) +": ");
   while(!in.hasNextInt()) {
       System.out.print("This app doesn't accept letters or symbols: ");
       in.next();
   }
   chain[x] = in.nextInt();
   if(chain[x] == 0)    {
       System.out.println("This app doesn't accept 0");
       --x;
   }
}

共 (1) 个答案

  1. # 1 楼答案

    nextInt()消耗令牌,因此当您执行in.nextInt()==0操作时,如果值为零,则读取令牌并循环

    如果令牌不是零,循环结束,执行chain[x] = in.nextInt(),它读取下一个令牌。又不一样了

    您应该捕获变量中的值,然后检查零,并在适当的情况下使用它