变量未显示在 system.out.println 中



我编写了一个程序,它接受考试成绩并将变量分配给某个星号和字母等级。该程序正在编译,但我相信变量中有 2 个问题。我无法获得输入的最低分数,也无法获得最高分数。这两个变量似乎都以正确的方式定义,所以我希望有人能用一双全新的眼睛来提供帮助。

public static void main(String[] args){
Scanner s = new Scanner(System.in);
System.out.print("Welcome to GradeCalculator!nn"); // Start of the program
// All variables are defined below
int students = 0;
int exams = 0;
double classav = 0;
int count = 0;
double lowest = 0;
double highest = 0;
String name;
// Intake and output portions of the program for number of students, and number of exams 
System.out.print("Please enter the number of students: ");
students = s.nextInt();
System.out.print("Please enter the number of exams: ");
exams = s.nextInt();
System.out.println("n----------------------------------------");
String[] examScores = new String [exams];
while(count < students) {
int totalExam=0;
int starnum=0;
char letter='a';
String stars= "";
//New Scanner Statement to fix String "name" problems   
Scanner n = new Scanner(System.in);
System.out.print("Enter student " + (count+1) +"'s namet: ");
name = n.nextLine();
n.nextLine(); 
System.out.print("Enter exam scorest: ");
examScores = n.nextLine().split(" ");
for(int i = 0; i < exams; i++){
totalExam += Integer.parseInt(examScores[i]);
}
//for loop used to compare exam grades. printing out proper star counts according to letter grades within the if statements
int studentavg = totalExam / exams;
System.out.println(" Average: " + studentavg);
if(studentavg>=90){
letter = 'A';
stars = "****";
starnum = 4;
}//if1
if(studentavg<90 && studentavg>=80){
letter = 'B';
stars = "***";
starnum = 3;
}//if2
if(studentavg<80 && studentavg>=70){
letter = 'C';
stars = "**";
starnum = 2;
}//if3
if(studentavg<70 && studentavg>=60){
letter = 'D';
stars = "*";
starnum = 1;
}//if4
if(studentavg<60){
letter = 'F';
stars = "";
starnum = 0;
}//if5
System.out.println("Grade statistics for " + name);
System.out.println(" Letter Grade: " + letter);
System.out.println(name + " gets " + starnum + " stars! "+ stars);

System.out.println("n----------------------------------------");
classav += studentavg;
count++;
}// while loop


System.out.println("Class statistics: ");
System.out.println(" Average: "+ (classav / exams));
System.out.println(" Lowest : " + lowest);
System.out.println(" Highest: " + highest);
System.out.println("Done. Good bye!");
}
}

现在的结果 ----------------------------------------

Welcome to GradeCalculator!
Please enter the number of students: 2
Please enter the number of exams: 3
----------------------------------------
Enter student 1's name  : Rob
Enter exam scores   : 100 99 77
Average: 92
Grade statistics for Rob
Letter Grade: A
Rob gets 4 stars! ****
----------------------------------------
Enter student 2's name  : Tom
Enter exam scores   : 100 99 77
Average: 92
Grade statistics for Tom
Letter Grade: A
Tom gets 4 stars! ****
----------------------------------------
Class statistics: 
Average: 30.666666666666668
Lowest : 0.0
Highest: 0.0
Thank you for using Rob Nelson's Grade Calculator! Good bye!  :)
BUILD SUCCESSFUL (total time: 56 seconds)

预期成果 ----------------------------------------

Welcome to GradeCalculator!
Please enter the number of students: 2
Please enter the number of exams: 3
----------------------------------------
Enter student 1's name  : Rob
Enter exam scores   : 100 99 77
Average: 92
Grade statistics for Rob
Letter Grade: A
Rob gets 4 stars! ****
----------------------------------------
Enter student 2's name  : Tom
Enter exam scores   : 100 99 77
Average: 92
Grade statistics for Tom
Letter Grade: A
Tom gets 4 stars! ****
----------------------------------------
Class statistics: 
Average: 92
Lowest : 77
Highest: 100
Thank you for using Rob Nelson's Grade Calculator! Good bye!  :)
BUILD SUCCESSFUL (total time: 56 seconds)

更新以修复类统计信息部分:您的问题之一是您将Scanner s用于 2 种不同类型的变量,因此当您使用 Scanner 作为字符串值(例如:name = s.nextLine();(时,您需要为此创建一个新的 Scanner 语句(例如:Scanner n = new Scanner(System.in); 然后您将s.nextLine替换为n.nextLine.此外,要获得类平均值,请将(classav / exams)中的exams替换为students,使其如下所示:(classav / students)。要修复最低值和最高值,请在examScores = n.nextLine().split(" ");下插入以下代码

for(int i = 0; i < exams; i++){
totalExam += Integer.parseInt(examScores[i]);
if(Integer.parseInt(examScores[i]) < lowest){
lowest = Integer.parseInt(examScores[i]);
}
if(Integer.parseInt(examScores[i]) > highest){
highest = Integer.parseInt(examScores[i]);
}
}

最新更新