java代码,查找浮点数的最小值,最大值和平均值

时间:2017-09-10 22:39:48

标签: java

我写下面的代码一切正常,但它从不执行最后一个循环,所以输入的最后一个值永远不会计算到最小值/最大值/平均值。 我知道哪里出错了?

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);



}
}

1 个答案:

答案 0 :(得分:2)

您的程序中有两个错误(假设您的意图是输入5个数字):

  1. 您正在使用count来表示您已输入的成绩数。在您输入任何成绩之前,您输入了多少成绩?这是count应该具有的值,但您已将其初始化为错误的值。
  2. 另一个问题在于你如何撰写while

       while (input.hasNextDouble() && count<5)
    
  3. 假设您已经修复了第一个问题,现在它允许您输入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 ,并在你有足够的成绩时立即退出循环,而不是寻找更多的输入。