我不是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;
}
}
答案 0 :(得分:1)
nextInt()
使用令牌,因此当您执行in.nextInt()==0
时,如果值为零,则会读取令牌并循环播放。
如果令牌不为零,则循环结束并执行chain[x] = in.nextInt()
,其中读取 next 令牌。不一样了。
您应该捕获变量中的值,然后检查零,并在适当的时候使用它。