java不理解为什么代码会进入无限循环
我正在努力学习Java,我在使用Scanner
类时遇到了困难。我想做的是使用Scanner.nextInt()
方法接受一个整数。除此之外,我还想检查输入是否为数字。如果没有,我想让用户再次输入
以下是我为完成此任务而编写的代码:
do
{
System.out.print("Please enter Side 1:\t");
if(scanner.hasNextInt())
{
d1=(double)scanner.nextInt();
i=0;
}
else
{
System.out.print("Side shoud be a number!\t");
i=1;
}
}
while(i!=0);
不幸的是,这进入了一个无限循环,我的理解是,它不会等待第二个循环中的“返回”
# 1 楼答案
您不会在else分支中使用不正确的输入,因此如果
scanner.hasNextInt()
返回false
,您将进入一个无限循环,因为在下一次迭代中会看到相同的扫描程序状态# 2 楼答案
有些人似乎认为交换1或0是一个简单的错误,或者条件应该被翻转——但事实并非如此。如果你做了这个改变,那么即使你已经得到了一个数字,你也会得到持续不断的提示
您只希望在输入不是整数时继续提示,并在获得该整数时停止提示,对吗
我建议使用try-catch和一种形式的Parse方法,这样就可以清楚地了解您想要做什么
(另外,您的整数i不需要是整数-它可以是布尔值(true或false)。这也将使变量的意图更加清晰。命名好变量对于编写好代码很重要。)
见此:
只有在您没有获得双倍奖励时,才会继续提示。一旦你拿到双人票,它就停止了
# 3 楼答案
你会陷入无限循环,因为下一行的扫描器没有任何方法调用。请参见加粗线
# 4 楼答案
如果
scanner.hasNextInt()
返回true,那么它应该工作,但当它返回false时,它将进入无限循环这个怎么样
或者尝试这样更改您的while循环:-
# 5 楼答案
大家好,我终于明白了,我需要做的就是初始化循环中的scanner对象,这样每次循环执行时它都会等待,代码如下:
谢谢你的回复