-1

我正在编写一个名为 CreateGradeReport.java 的程序。这是一个旨在提示用户输入学生姓名和数字等级的程序。当输入“-1”时,程序将停止提示用户输入。当输入 -1 时,将显示成绩报告,其中包含学生姓名和成绩(转换为字母成绩),以及最高和最低成绩以及所有成绩的平均值。

这是我的代码:

import java.util.*;
public class CreateGradeReport {

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    String studentName = "";
    int studentGrade = 0;
    int count = 0;
    int sum = 0;
    int min = 100;
    int max = 0;
    do {
        System.out.print("\nEnter the student's name or [-1] to quit: ");
        studentName = input.nextLine();
        if (studentName.equals("-1")){
            break;
            }
        System.out.print("\nEnter the student's grade or [-1] to quit: ");
        studentGrade = input.nextInt();
        if(studentGrade == -1){
            break;
            }
        String dummy = input.nextLine();
        }
    while(!studentName.equals("-1") && studentGrade != -1);
    System.out.println("-----------------------");
    System.out.println("Class Grading Report");
    System.out.println("-----------------------");
    if(studentGrade >= 90) {
        System.out.println(studentName + ": A");
    }
    else if(studentGrade >=80 && studentGrade < 90) {
        System.out.println(studentName + ": B");
    }
    else if(studentGrade >=70 && studentGrade < 80) {
        System.out.println(studentName + ": C");
    }
    else if(studentGrade >= 60 && studentGrade < 70){
        System.out.println(studentName + ": D");
    }
    else {
        System.out.println(studentName + ": F");
    }
    if (studentGrade < min) {
        min = studentGrade;
    }
    if (studentGrade > max) {
        max = studentGrade;
    }
    count++;
    sum += studentGrade;
    
    System.out.println("Minimum: " + min);
    System.out.println("Maximum: " + max);
    System.out.println("Average: " + sum/count);
}
}

除了一件事之外,我的所有设置都正确:我无法单独打印出所有学生的姓名和成绩。每次我运行程序时,我都会得到 -1 的学生姓名以及输入的最终 studentGrade 的成绩。这是我收到的输出:

Enter the student's name or [-1] to quit: Shane B.

Enter the student's grade or [-1] to quit: 99

Enter the student's name or [-1] to quit: Megan B.

Enter the student's grade or [-1] to quit: 88

Enter the student's name or [-1] to quit: -1
-----------------------
Class Grading Report
-----------------------
-1: B
Minimum: 88
Maximum: 88
Average: 88

我需要知道如何获取它,以便我可以打印出我在 do while 循环期间提供的所有输入。我宁愿这样做而不创建单独的类或使用 ArrayList。

4

2 回答 2

1

学生姓名为 -1 的原因是因为您首先存储-1studentName(or studentGrade) 中而退出,所以当您尝试将这些打印到控制台时,它们中的任何一个都必须是-1,您可以轻松地看到这个在你的循环条件下。

为此(我认为您打算这样做,将几个学生打印到控制台),您必须将整个 main 方法包装在一个循环中,但删除内部的方法。

你可以尝试这样的事情:

public static void main(String[] args) {
  Scanner scanner = new Scanner(System.in);
  do {
    System.out.println("Enter -1 to exit: ");
    int i = scanner.nextInt();
    if (i == -1) {
      exit = true;
    }
    ..
    get student specific input here
    ..
    process like you have done before
    ..
    print results

  } while (!exit)
}
于 2021-04-11T18:39:25.830 回答
0

使用地图,这在你的情况下是有意义的。一张地图,其中键是学生姓名,值是学生成绩。

      import java.util.*;
      public class CreateGradeReport {

       public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        Mpa<String, Integer> map = new HashMap() ;
        String studentName = "";
        int studentGrade = 0;
        int count = 0;
        int sum = 0;
        int min = 100;
       int max = 0;
       do {
           System.out.print("\nEnter the student's name or [-1] to quit: ");
          studentName = input.nextLine();
         if (studentName.equals("-1")){
             break;
              }
        System.out.print("\nEnter the student's grade or [-1] to quit: ");
        studentGrade = input.nextInt();
        if(studentGrade == -1){
             break;
             }
       String dummy = input.nextLine();
       map.put(studentName, student Grade) ;
         }
      while(!studentName.equals("-1") && studentGrade != -1);

最后只是做System.out.println(map);

于 2021-04-11T18:51:37.767 回答