【问题标题】:Java GradeCalculator - While loop not working correctlyJava GradeCalculator - While 循环无法正常工作
【发布时间】:2014-12-06 19:58:33
【问题描述】:

我正在编写一个程序,其中用户输入班级中的学生人数、班级参加的考试次数,然后输入每个学生的姓名和考试成绩。然后程序计算该学生的成绩并为他们分配相应的字母成绩。最后,它将他们的分数添加到 classSum 中,计算平均班级分数并显示出来。

这是我目前所拥有的: 公共类成绩计算器{

    public static void main(String[] args) {
        int classSum = 0;       // variable used to hold sum of entire classes exams
        int classExams = 0;     // variable used to hold number of exams taken by whole class

        Scanner s = new Scanner(System.in);

        System.out.println("Welcome to Gradecalculator!");
        System.out.println("Please enter the number of students:");
        int students = s.nextInt();

        System.out.println("Please enter the number of exams:");
        int exams = s.nextInt();   

        int i = 0;
        int studentnumber = 1;
        int sum = 0;

        while (i < students) {    // loop until it matches number of students entered above
            i++;
            sum = 0;

            System.out.println("Enter student " + studentnumber++ + "'s name :");
            String studentname = s.next();

            System.out.println("Enter exam scores :");

            int input = 0;
            for (; input < exams; input++) {   
                int n = s.nextInt();
                sum+=n;

                if (n < 0) {
                    System.out.println("Invalid exam scores, reenter: ");  //if one of the scores entered is     negative, display message
                }
            }

            double average = sum/exams;        // assign letter grade based on average of exams
            if (average <= 100 && average >= 90) {
                System.out.println("Letter grade: A");
                System.out.println(studentname + " gets 4 stars! ****");
            } if (average <= 89 && average >= 80) {
                System.out.println("Letter grade: B");
                System.out.println(studentname + " gets 3 stars! ***");
            } if (average <= 79 && average >= 70) {
                System.out.println("Letter grade: C");
                System.out.println(studentname + " gets 2 stars! **");
            } if (average <= 69 && average >= 60) {
                System.out.println("Letter grade: D");
                System.out.println(studentname + " gets 1 star! *");
            } if (average <= 59) {
                System.out.println("Letter grade: F");
                System.out.println(studentname + " gets 0 stars!");
            }

            classSum += sum;             // add sum of this student's scores to the classSum
            classExams += exams;   // add exams taken by this student to amount of exams taken by whole class
        }

        int classAverage = classSum/classExams; // compute class average
        System.out.println("Class statistics:");
        System.out.println("\tAverage: " + classAverage);
    }
}

这是我得到的输出:

Welcome to Gradecalculator!

Please enter the number of students:

2

Please enter the number of exams:

3

Enter student 1's name :

sam

Enter exam scores :

80 80 80

Letter grade: B

sam gets 3 stars! ***

Enter student 2's name :

joe

Enter exam scores :

90 90 90

Class statistics:

Average: 125

如您所见,在第一个学生之后,输入姓名和考试成绩不会像循环应该做的那样显示下一个学生的字母成绩。此外,没有正确计算班级平均值。我在哪里出错了,我有点不知所措。

【问题讨论】:

  • 嗯?我确实接受了答案,因为他帮助我解决了我的问题。我不想继续为我遇到的下一个问题打扰同一个人,这是不同的。

标签: java while-loop


【解决方案1】:

你必须在循环的每一圈将 sum 设置为 0

while (i < students) { // loop until it matches number of students entered above
    i++;
    sum = 0;

    System.out.println("Enter student " + studentnumber++ + "'s name :"); String studentname = s.next();
    // [...]

【讨论】:

  • 问题是我需要将每个学生的分数加到班级总和中,以便在最后一步计算班级平均分。
  • 是的,classSum 还是这样,sum 只是一个临时变量,用于存储当前学生的成绩
  • 啊,好的。我按照您的指示将 sum=0 添加到循环的开头。现在发生的事情是在我输入第一个学生的分数后,它给了我正确的字母等级和信息,但不允许我输入下一个学生的名字(它直接跳到输入下一个学生的分数)。知道为什么会这样吗?
  • 你能用这些新信息编辑你的帖子吗?
  • 别在意我的最后评论。我只是输入错误。我会尽快更新 OP。感谢您的帮助。
【解决方案2】:

您不会在循环内重置(分配零)sum。这意味着在 Sam 之后,当轮到 Joe 时,他的分数会加到 sam 的上面!为此,您必须在分数读取和添加循环之前重置sum

这也是它没有打印任何关于乔的信息的原因。由于您基本上将六次考试的分数总和除以三,因此您得到的结果超过了一百,并且您的任何if 语句都没有涵盖。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-06
    • 2014-06-02
    相关资源
    最近更新 更多