【发布时间】:2019-10-09 06:03:07
【问题描述】:
我在我的代码中使用了一个while 语句,其中,在while 语句中,用户输入了一个数字。要停止程序循环,用户必须输入单词“stop”。但是,一旦我输入了一个数字,输出就会跳到另一行而不打印我想要它打印的语句,我必须再次输入我想要的输入,程序才能开始循环。 唯一不会出现此问题的情况是用户先输入“停止”,然后代码可以正常工作。
这是查找任意数量的用户输入数字的最大值、最小值和平均值。我已尝试更改 else/if 语句的顺序以及所述 else/if 语句的参数,但似乎没有任何效果。
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)
{
System.out.print("Enter a number (type "+"\""+"stop"+"\""+" to stop): ");
String originalInput = userInput.nextLine();
if(originalInput.equals("stop"))
{
stopped = true;
invalidAmount ++;
System.out.println(numberAmount+" numbers were entered with "+invalidAmount+" invalid inputs.");
}
else if(userInput.hasNextDouble())
{
double currentValue = Double.parseDouble(originalInput);
max = Math.max(max, currentValue);
min = Math.min(min, currentValue);
mean = currentValue;
numberAmount ++;
}
else if(originalInput.equals("stop") == false)
{
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();
}
}
例如,我希望输入 7 后的输出是 “输入一个数字(输入“停止”停止):”在下一行(因为程序循环不断提示输入数字),然后用户可以继续输入他们喜欢的数字。 相反,实际输出是用户输入的原始提示下的一个空行,用户必须再次输入他们想要的输入,程序才能开始循环。
【问题讨论】:
-
方法有什么NextDouble() 做什么? previous read line 是否看起来是双精度的? javadoc 是怎么说的?
-
啊,这是我的问题,愚蠢的错误。如何在 else if 语句中检查用户输入是否为双精度?
-
一开始您不会读取一行内容,而是在读取任何内容之前调用 hasNextDouble()。如果它返回 true,你就知道有一个 double 并且你使用 nextDouble() 读取了 id。如果它返回 false,则读取该行并将其与“stop”进行比较。
-
@DanielLiu 翻阅了 Double#parseDouble 的 JavaDoc,尤其是它在发生错误时抛出的内容。
-
@JBNizet 知道了,谢谢!