Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 平均成绩计算器未返回正确答案_Java_Sum_Average_Addition - Fatal编程技术网

Java 平均成绩计算器未返回正确答案

Java 平均成绩计算器未返回正确答案,java,sum,average,addition,Java,Sum,Average,Addition,这是一个计算平均成绩的程序,我无法找出我的代码有什么问题。它返回了错误的答案 编辑文章以删除个人信息。 : 总和应为150,平均值为75。您没有将您在之外接受的第一个等级添加到总数中。 如果等级不可接受,则增加计数也没有意义,因此仅在等级检查后增加计数 您可以重写while块,例如 while (true) { System.out.println("Please input the grade"); grade = keyboard.nextDouble

这是一个计算平均成绩的程序,我无法找出我的代码有什么问题。它返回了错误的答案

编辑文章以删除个人信息。 :


总和应为150,平均值为75。

您没有将您在
之外接受的
第一个
等级添加到
总数中。
如果
等级
不可接受,则增加
计数
也没有意义,因此
仅在
等级
检查后增加
计数

您可以重写while块,例如

    while (true) {
        System.out.println("Please input the grade");
        grade = keyboard.nextDouble();
        if (grade < 0)
            break;

        count = count + 1;
        total += grade;


    }
    avgGrade = total / count;

    System.out.println("Sum is " + total);
    System.out.printf("The average of the  %.0f grades are %.2f ", count,
            avgGrade);

}
while(true){
System.out.println(“请输入分数”);
等级=键盘.nextDouble();
如果(等级<0)
打破
计数=计数+1;
总数+=年级;
}
平均等级=总数/计数;
系统输出打印项次(“总和为”+总计);
System.out.printf(“%.0f等级的平均值为%.2f”,计数,
平均等级);
}

问题在于,在while循环开始之前,您正在从用户处读取一个等级,之后您将忽略该值

您应该删除这两行,事情将按预期进行。我在下面的代码片段中对这些行进行了注释,以明确地向您展示问题所在

public static void avgGrade() {
    Scanner keyboard = new Scanner(System.in);
    double count = 0;
    double avgGrade = 0; 
    double grade;
    double total = 0; 
    // System.out.println("Please input the grade");
    // grade = keyboard.nextDouble();

    while(true){
        System.out.println("Please input the grade");           
        grade = keyboard.nextDouble();
        count = count + 1;
        if (grade < 0) break;

        total += grade;
        avgGrade = total/count;
    }

    System.out.println ("Sum is " +total);
    System.out.printf("The average of the  %.0f grades are %.2f " ,count ,avgGrade);
}
publicstaticvoidavggrade(){
扫描仪键盘=新扫描仪(System.in);
重复计数=0;
双平均梯度=0;
双级;
双倍合计=0;
//System.out.println(“请输入分数”);
//等级=键盘.nextDouble();
while(true){
System.out.println(“请输入分数”);
等级=键盘.nextDouble();
计数=计数+1;
如果(等级<0)断裂;
总数+=年级;
平均等级=总数/计数;
}
System.out.println(“总和为”+总计);
System.out.printf(“%.0f等级的平均值为%.2f”,计数,平均等级);
}
作为旁注,您应该始终尝试最小化每个变量的范围。这里,
grade
变量仅在
while
循环中使用,因此您可以直接编写
double grade=keyboard.nextDouble()并删除方法开头的声明。

几个问题:

  • 首先,在第一次阅读之前,你在年级上做两个作业(第一个在while循环之前,第二个在while循环内部),所以第一个输入将被完全忽略
  • 第二,在检查是否中断while循环之前,先递增count变量,这样最终count将比应该的值高1
  • 第三,平均值是在循环内部计算的,不会在最后一次(部分)迭代中重新计算
程序将如下所示:

  • 输入:100,计数:0,总计:0,平均值:0
    • 输入被忽略
  • 输入:50,计数:1,总数:50,平均值:50
  • 输入:-9,计数:2,总数:50,平均值:50
    • 循环退出,但之前的计数递增;没有重新计算平均值

    • 谢谢大家。这是最后的代码

             /**
             * This program will calculate grade average of user input
             * 
             *    Date: 10/2/2015
             */
             import java.util.Scanner;
             public class GradeAVG {
      
      
      
      public static void main(String[] args) {
      
          avgGrade()
      
      }
      
      public static void avgGrade() 
      {
          Scanner keyboard = new Scanner (System.in);
      
          double count = 0;
          double avgGrade = 0 ; 
          double total = 0; 
      
          while(true){
                  System.out.println("Please input the grade");           
               double grade= keyboard.nextDouble();
      
              if (grade < 0) break;
              count = count + 1;
               total += grade;
      
              avgGrade = total/count;
      
      
      
                  }
      
              System.out.println ("Sum is " +total);
              System.out.printf("The average of the  %.0f grades are %.2f " ,count ,avgGrade);
      
      
      }   
      
      }
      
      /**
      *该程序将计算用户输入的平均成绩
      * 
      *日期:2015年10月2日
      */
      导入java.util.Scanner;
      公开课平均成绩{
      公共静态void main(字符串[]args){
      avgGrade()
      }
      公共静态void avgGrade()
      {
      扫描仪键盘=新扫描仪(System.in);
      重复计数=0;
      双平均梯度=0;
      双倍合计=0;
      while(true){
      System.out.println(“请输入分数”);
      双级=键盘.nextDouble();
      如果(等级<0)断裂;
      计数=计数+1;
      总数+=年级;
      平均等级=总数/计数;
      }
      System.out.println(“总和为”+总计);
      System.out.printf(“%.0f等级的平均值为%.2f”,计数,平均等级);
      }   
      }
      
      欢迎来到堆栈溢出。写问题时请多加小心——你的演示文稿到处都是,代码的格式不是代码,非代码的格式是代码,缩进不好,垂直空白的随机位很大。如果人们一开始就写了一个好问题,那么帮助他们就容易多了(而潜在的回答者也更可能这样做)。
      public static void avgGrade() {
          Scanner keyboard = new Scanner(System.in);
          double count = 0;
          double avgGrade = 0; 
          double grade;
          double total = 0; 
          // System.out.println("Please input the grade");
          // grade = keyboard.nextDouble();
      
          while(true){
              System.out.println("Please input the grade");           
              grade = keyboard.nextDouble();
              count = count + 1;
              if (grade < 0) break;
      
              total += grade;
              avgGrade = total/count;
          }
      
          System.out.println ("Sum is " +total);
          System.out.printf("The average of the  %.0f grades are %.2f " ,count ,avgGrade);
      }
      
             /**
             * This program will calculate grade average of user input
             * 
             *    Date: 10/2/2015
             */
             import java.util.Scanner;
             public class GradeAVG {
      
      
      
      public static void main(String[] args) {
      
          avgGrade()
      
      }
      
      public static void avgGrade() 
      {
          Scanner keyboard = new Scanner (System.in);
      
          double count = 0;
          double avgGrade = 0 ; 
          double total = 0; 
      
          while(true){
                  System.out.println("Please input the grade");           
               double grade= keyboard.nextDouble();
      
              if (grade < 0) break;
              count = count + 1;
               total += grade;
      
              avgGrade = total/count;
      
      
      
                  }
      
              System.out.println ("Sum is " +total);
              System.out.printf("The average of the  %.0f grades are %.2f " ,count ,avgGrade);
      
      
      }   
      
      }