我试图创建一个简单的输入和do-while
程序,我要求代码在用户没有输入3.14时继续重复,但由于某种原因它运行不正常。它输入时没有显示错误。
Scanner num = new Scanner(System.in);
double pi = num.nextDouble();
do {
System.out.println("What is pi?");
pi = num.nextDouble();
}
while( pi != 3.14);
System.out.println("Yup pi = 3.14");
答案 0 :(得分:1)
您要求在循环之前输入而不通知用户,然后取出第一个扫描仪。 像这样
Scanner num = new Scanner(System.in);
double pi = 0.0;
do {
System.out.println("What is pi?");
pi = num.nextDouble();
}
while( pi != 3.14);
System.out.println("Yup pi = 3.14");
答案 1 :(得分:1)
您正在阅读pi
两次,一次在第2行,一次在第5行。您只需在第2行声明pi
,您的代码就可以使用(见下文)。因为do-while循环的主体总是运行一次,你只需要一行询问。如果你只使用了一个基本的while循环,你需要有两行。
Scanner num = new Scanner(System.in);
double pi;
do {
System.out.println("What is pi?");
pi = num.nextDouble();
} while(pi != 3.14);
System.out.println("Yup pi = 3.14");
答案 2 :(得分:0)
这可能与比较浮标完全不好的事实有关。相反,使用这样的东西:
if(Math.abs(pi - (double) 3.14) < epsilon)
其中epsilon
是一个调节精度的数字(在这种情况下,0.001
之类的东西就足够了)。有关详情,请参阅此处:What's wrong with using == to compare floats in Java?