当前位置: 首页 > 知识库问答 >
问题:

Java gradeCalculator-while循环工作不正常

封德华
2023-03-14

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

这就是我目前所拥有的:public class GradeCalculator{

    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

正如您所看到的,在第一个学生之后,输入姓名和考试分数并不像循环应该做的那样显示下一个学生的字母等级。此外,未正确计算类平均值。我对自己的错误有点不知所措。

共有1个答案

傅朗
2023-03-14

您必须将循环的每一圈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();
    // [...]
 类似资料:
  • 我对c不熟悉,我正试图解决Bjarne Stroustrup的书《编程原则和实践使用C》第四章中的练习6,但不明白为什么我的代码不起作用。 演习: 制作一个保持十个字符串值“零”、“一”、......、“九”的向量。在将一个数字转换为相应的拼写值的程序中使用它:例如,输入7给出输出7。有相同的程序,使用相同的输入回路,将拼写出来的数字转换成它们的数字形式;例如,输入7给出输出7。 我的循环只对一个

  • Imma java新手,所以我试着学东西。我创建了一个布尔方法,这是一个小的骰子游戏。我需要这个方法是从main方法调用,并继续玩,而返回值是真的(游戏是赢的),但停止执行,如果返回值是假的。我也需要多少次球员赢了。所以我创造了这样的东西: 初始化为私有静态int

  • 我正在努力学习java。我正在尝试制作一个程序,计算一组学生通过测试的分数,输出输入的总分数,分数高于69的通过测试的次数,并显示通过测试的百分比。 我遇到的问题是,我似乎无法正确获得输出的百分比。它一直显示0.0。以下是我目前为止想出的最好的代码。 嵌套while循环是一种好的编码方式吗?缩短我的程序有更简单的方法吗?谢谢

  • 问题内容: 我希望我的程序一直问这个问题,直到得到可以使用的响应为止,尤其是0到20之间的一个数字。此类中还有很多其他内容,因此这里有一段摘录,其中do- while是(我已经命名了变量以及所有内容。 问题答案: 您在表达式中使用了一个赋值: 您可以替换为 或更好 如果变量和在其他地方未使用,则可以消除它们,从而为您提供:

  • 只要给定条件为真,Perl编程语言中的while循环语句就会重复执行目标语句。 语法 (Syntax) Perl编程语言中while循环的语法是 - while(condition) { statement(s); } 这里的statement(s)可以是单个陈述或一个陈述块。 condition可以是任何表达。 当条件为真时,循环迭代。 当条件变为假时,程序控制将立即传递到循环之后的行。

  • 编写程序时,您可能会遇到需要反复执行操作的情况。 在这种情况下,您需要编写循环语句以减少行数。 JavaScript支持所有必要的循环,以减轻编程压力。 while循环 JavaScript中最基本的循环是while循环,将在本章中讨论。 while循环的目的是只要expression为真,就重复执行语句或代码块。 表达式变为false,循环终止。 流程图 while loop流程图如下 - 语法