我正在努力学习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);
不幸的是,这进入了一个无限循环,我理解的是它不会等待第二个循环中的“返回”。
答案 0 :(得分:0)
你没有在else分支中使用不正确的输入,所以如果scanner.hasNextInt()
返回false
,你将进入一个无限循环,因为在下一次迭代中会看到相同的扫描器状态。
答案 1 :(得分:0)
如果scanner.hasNextInt()
返回true,则它应该有效,但当它返回false时,它将进入无限循环。
这个怎么样: -
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;
scanner.nextLine();
}
}
while(i!=0);
或尝试改变你的while循环: -
while(i==0);
答案 2 :(得分:0)
你陷入了无限循环,因为下一行扫描仪没有任何方法调用。请参阅粗线添加。
do {
System.out.print("Please enter Side 1:\t");
if(scanner.hasNextInt()) {
double d1=(double)scanner.nextInt();
i=0;
}
else {
System.out.print("Side shoud be a number!\t");
i=1;
}
**scanner.nextLine();**
}
while(i!=0);
答案 3 :(得分:0)
有些人似乎认为交换1或0是一个简单的错误,或者应该翻转条件 - 但事实并非如此。如果你做了这个改变,那么你就会不断提示数字,即使你已经有了数字。
您只想继续提示输入是否不是整数,并且在获得该整数时停止提示,对吧?
我建议使用try-catch和Parse方法的形式,以便明确你想做什么。
(另外,你的整数我不需要是一个整数 - 它可能只是一个布尔值(true或false)。这也会使变量的意图更清晰。为好的代码命名你的变量很重要。)
见:
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);
}
}
如果你没有获得双倍,这只会继续提示。一旦你得到双倍,它就会停止。
答案 4 :(得分:0)
Hello Guys我终于得到了我需要做的就是在循环内部初始化扫描器对象,这样每次循环执行时都会等待代码:
do
{
System.out.print("Please enter Side 1:\t");
scanner=new Scanner(System.in);
if(scanner.hasNextInt())
{
d1=(double)scanner.nextInt();
i=0;
}
else
{
System.out.print("Side shoud be a number!\t");
i=1;
}
}
while(i==1);
感谢您的回复。