3 回答
TA贡献1789条经验 获得超10个赞
您没有在代码示例中指定userInput
是什么,但从使用情况来看,它看起来是 的实例Scanner
。如果你有一个Scanner
声明然后调用hasNextDouble()
,你将得到一个符合你的用法的布尔结果——你将其作为语句中的条件if
。
Scanner userInput = new Scanner(System.in); boolean b = userInput.hasNextDouble();
图片中缺少的是如何hasNextDouble()
工作的。查看Scanner 的 Javadoc:
如果可以使用 nextDouble() 方法将此扫描器输入中的下一个标记解释为双精度值,则返回 true。扫描仪不会前进超过任何输入。
为了回答下一个输入是否是双精度数的真/假,扫描仪必须等待用户的输入才能继续。
所有这些都是为了说明:您的代码看起来运行正常。如果您不想等待用户输入,则需要编写代码来反映这一点。
TA贡献1786条经验 获得超11个赞
我认为你应该反转代码的逻辑,假设你正在使用扫描仪,尝试这样的事情:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
boolean stopped = false;
int numberAmount = 0;
int invalidAmount = 0;
double max = Integer.MIN_VALUE;
double min = Integer.MAX_VALUE;
double mean = 0;
while (stopped == false) {
Scanner userInput = new Scanner(System.in);
System.out.print("Enter a number (type " + "\"" + "stop" + "\"" + " to stop): ");
if (userInput.hasNextDouble()) {
double currentValue = userInput.nextDouble();
max = Math.max(max, currentValue);
min = Math.min(min, currentValue);
mean = currentValue;
numberAmount++;
} else {
String originalInput = userInput.nextLine();
if (originalInput.equals("stop")) {
stopped = true;
invalidAmount++;
System.out.println(numberAmount + " numbers were entered with " + invalidAmount + " invalid inputs.");
} else {
System.out.println("Not a number...");
invalidAmount++;
}
}
}
System.out.println("The maximum is " + max + ".");
System.out.println("The minimum is " + min + ".");
System.out.println("The mean is " + (mean / numberAmount) + ".");
// userInput.close();
}
}
基本上,您首先检查输入类型,然后才从控制台收集值。按照你现在的方式去做,你总是会要求第二个输入。
添加回答
举报