Java:nextInt()验证不起作用属性

时间:2016-05-21 22:19:56

标签: java validation while-loop java.util.scanner

我不是Java专家,我遇到了问题。我使用Scanner从键盘获取数据,但在将数据注册到数组之前,我必须进行2次验证。一个是,数据不必是字符串,我使用!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 个答案:

答案 0 :(得分:1)

nextInt() 使用令牌,因此当您执行in.nextInt()==0时,如果值为零,则会读取令牌并循环播放。

如果令牌不为零,则循环结束并执行chain[x] = in.nextInt(),其中读取 next 令牌。不一样了。

您应该捕获变量中的值,然后检查零,并在适当的时候使用它。