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 楼答案
nextInt()
消耗令牌,因此当您执行in.nextInt()==0
操作时,如果值为零,则读取令牌并循环如果令牌不是零,循环结束,执行
chain[x] = in.nextInt()
,它读取下一个令牌。又不一样了您应该捕获变量中的值,然后检查零,并在适当的情况下使用它