【问题标题】:Computing average in a class计算班级平均成绩
【发布时间】:2015-11-08 16:46:35
【问题描述】:

现在我正在开发一个程序,可以打印学生姓名、身份证号、考试成绩、平均成绩和成绩。由于某种原因,计算平均分数的方法存在问题。我尝试添加括号,但这也没有改变结果。这最终会弄乱成绩,因为成绩是用平均分计算的。任何帮助表示赞赏,谢谢!这是我的代码:

 import java.util.Scanner;

    public class Student {
    private String fname;
    private String lname;
    private int id;
    private int score1;
    private int score2;
    private int score3;
    private double average;
    private String grade;

    public void readInfo()
    {
        Scanner k = null;
        k = new Scanner (System.in);

        System.out.println ("Please enter the first name: (Enter John as first name and Doe as last name to stop) ");
        fname = k.next();
        System.out.println("Please enter the last name: ");
        lname = k.next();
        if (fname.equalsIgnoreCase("John")&&lname.equalsIgnoreCase("Doe"))
            System.exit(0);
        System.out.println("Please enter the student ID: ");
        id = k.nextInt();
        System.out.println("Please enter the first score: ");
        score1 = k.nextInt();
        System.out.println("Please enter the second score: ");
        score2 = k.nextInt();
        System.out.println("Please enter the third score: ");
        score3 = k.nextInt();
    }

//The problem lies in here:

    private void computeAverage()
    {
        average = score1+score2+score3/3.0;

    }
    private void computeGrade()
    {
        if (average>=90&&average<=100)
            grade = "A";
        else if (average>=80&&average<=89.9)
            grade = "B";
        else if (average>=70&&average<=79.9)
            grade = "C";
        else if (average>=60&&average<=69.9)
            grade = "D";
        else 
            grade = "F";
    }

    private String getName()
    {
        return fname + " " + lname;
    }
    private double getAverage()
    {
        return average;
    }
    public void printAll()
    {
        System.out.printf("%-9s%-10s %-9s %-3s %-3s %-3s %-5s  %-5s", "LastName","FirstName","ID","S1","S2","S3","AVG","GRADE");
        System.out.println();
        System.out.println("-----------------------------------------------------");
        System.out.printf("%-9s%-9s  %-9d %-3d %-3d %-3d %-3.2f%-2s",lname,fname,id,score1,score2,score3,average,grade);
        System.out.println();
        System.out.println("-----------------------------------------------------");

    }

    }

【问题讨论】:

  • "我试过加括号,结果没有改变"
  • 周围(score1+score2+score3)
  • (double)(score1+score2+score3)/(3.0)
  • 这样做解决了问题,但由于某种原因,在我最后的打印语句中,它的平均值仍然为 0.0。有什么想法吗?
  • @3kings - 发布答案通常有助于 SO

标签: java class math methods average


【解决方案1】:
  • 我想问题是因为,您在任何地方都没有初始化变量average
  • 不过,您有一个方法 computeAverage()。它没有从程序中的任何地方调用。也许,你也可以在外面的任何地方做。
  • 请加上括号,这肯定会产生正确的结果。

【讨论】:

  • 就是这样!我忘了在“测试者”的课堂外调用它
【解决方案2】:

操作顺序。你正在做的是sum 1 + sum 2加上 sum3 和 3 的商。除法时,你必须除以正好你需要被除。你应该这样做(sum 1+ sum 2+ sum 3)/3

如果您不想除以 2,也可以乘以二分之一,这不会改变任何事情,但这只是另一种选择。

(sum 1+ sum 2+ sum 3)*1/2

记住你想划分什么。如果它是更多术语,请利用分组符号!

{Rich}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-25
    • 2015-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-03
    相关资源
    最近更新 更多