我完全陷入了这个项目,其中用户应该输入类(class)中的学生人数以及参加的考试次数。然后他们输入每个学生的姓名,然后在一行中输入该学生的考试成绩,并用空格分隔。该程序计算每个学生的平均分和相应的字母等级。
这是我到目前为止所拥有的:
public class proj2 {
public static void main(String[] args) {
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) {
double average = sum/exams;
System.out.println("Enter student " + studentnumber++ + "'s name :");
String studentname = s.next();
System.out.println("Enter exam scores :");
for (; i < exams; i++) {
int n = s.nextInt();
sum+=n;
if (n < 0) {
System.out.println("Invalid exam scores, reenter: ");
}
}
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!");
}
}
}
}
这是我现在得到的输出:
Welcome to Gradecalculator!
请输入学生人数: 3 请输入考试次数: 3 输入学生 1 的姓名: 萨姆 输入考试成绩: 80 80 80 字母等级:F 萨姆获得 0 颗星!
显然三个80首先应该是B,所以我显然没有正确计算平均值,但我不明白为什么。
最佳答案
您的条件应如下所示:
if (average <= 100 && average >=90)
不是这样的:
if (average <= 100 & average >=90)
您想要使用逻辑 AND 而不是按位 AND。
另一个问题是您在每次迭代中将 sum
重置为 0,因此您实际上并未累加总和。
最后,平均值和所有条件的计算应该在 for 循环之外,因为您希望在计算平均值之前读取所有输入。
关于java - 成绩计算器程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26318047/