我正在尝试学习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或0的简单错误,或者应该翻转条件-但这不是事实。如果您进行了更改,那么即使您已经有一个号码,也只会不断提示输入数字。
您只想在输入不是整数时继续提示,并在得到该整数时停止提示,对吗?
我建议您使用try-catch和一种Parse方法的形式,这样很清楚您想做什么。
(另外,您的整数i不必是整数-可以只是一个布尔值(是或否)。这也可以使变量的含义更清楚。为好代码命名很重要。)
看到这个:
import java.io.*;
import java.util.*;
class Test {
public static void main(String args[]) {
Scanner scanner = new Scanner(System.in);
boolean done = false;
double d1 = 0;
do {
System.out.print("Please enter Side 1:\t");
String next = scanner.next();
try {
d1 = Double.parseDouble(next);
done = true;
} catch (Exception e) {
System.out.print("Side should be a number!\t");
}
}
while(!done);
System.out.println("Number obtained: " + d1);
}
}
如果您没有加倍,这只会继续提示。一旦获得双打,它就会停止。