我写下面的代码一切正常,但它从不执行最后一个循环,所以输入的最后一个值永远不会计算到最小值/最大值/平均值。 我知道哪里出错了?
import java.util.Scanner;
public class Program4_JohnHuber {
public static void main(String[] args) {
Scanner input = new Scanner (System.in);
double total = 0;
//double numbers = 0;
int count = 1;
double largest = 0;
double smallest = Double.MAX_VALUE;
double average = 0;
System.out.print ("Please enter the grades, (Press enter when finished): ");
{
while (input.hasNextDouble()&& count<5)
{
double entered = input.nextDouble();
total = total + entered;
//count++;
//double average = 0;
if (count > 0)
{
average = total/count;
}
if (entered > largest)
{
largest = entered;
}
if (entered < smallest)
{
smallest = entered;
}
count++;
}
}
System.out.printf ("Your average grade is %3.2f,\n", average);
System.out.printf ("Your highest grade is %3.2f \n", largest);
System.out.printf ("Your lowest grade is %3.2f \n", smallest);
}
}
答案 0 :(得分:2)
您的程序中有两个错误(假设您的意图是输入5个数字):
count
来表示您已输入的成绩数。在您输入任何成绩之前,您输入了多少成绩?这是count
应该具有的值,但您已将其初始化为错误的值。另一个问题在于你如何撰写while
:
while (input.hasNextDouble() && count<5)
假设您已经修复了第一个问题,现在它允许您输入5个数字并保留这些数字的统计数据。现在它返回到while
循环并评估布尔表达式。
此时,count
为5,因此您想要退出循环。但这不会发生,因为input.hasNextDouble()
的评估是第一次。由于您在System.in
上使用扫描仪,这意味着程序会等到您输入非空白的内容,或直到您在Linux或CTRL + Z上用CTRL + D指示输入结束为止在Windows上。 在之后找到输入中的下一个项目,如果它找不到double
,则会退出循环(例如,您输入一些字母);或者,如果您输入double
,然后,则会检查count
。
这两个错误的组合是程序似乎忽略了最后一个输入的原因:(1)由于初始化count
中的错误,它只在4个等级而不是5个等级上进行计算,并且( 2)无论如何它要求5级,因为while
循环条件的部分顺序错误。
要解决第二个问题,请将其更改为
while (count < 5 && input.hasNextDouble())
首先检查count
,并在你有足够的成绩时立即退出循环,而不是寻找更多的输入。