【问题标题】:Varible not displaying in system.out.println变量未显示在 system.out.println
【发布时间】:2018-09-08 17:28:08
【问题描述】:

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

public static void main(String[] args){
    Scanner s = new Scanner(System.in);
    System.out.print("Welcome to GradeCalculator!\n\n"); // 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 name\t: ");
    name = n.nextLine();
    n.nextLine(); 
    System.out.print("Enter exam scores\t: ");
    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)

【问题讨论】:

  • 是时候做一些调试了。使用您最喜欢的 IDE 来帮助您做到这一点,您就会明白为什么您的代码行为不端。
  • 调试是编程的一部分。
  • 请添加一些你的实验:你输入了哪些值,你期望什么结果,以及你实际得到的结果。

标签: java variables calculator


【解决方案1】:

更新到修复类统计部分: 您的问题之一是您将Scanner s 用于 2 种不同类型的变量,因此当您将 Scanner 用于字符串值时(例如:name = s.nextLine();),您需要为此创建一个新的 Scanner 语句(例如:Scanner n = new Scanner(System.in); 然后你可以用n.nextLine 替换s.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]);
    }
}

【讨论】:

  • 这对于了解添加新的 Scanner 语句非常有帮助。这已经解决了字符串“名称”的问题,但我在“类统计信息:”部分中的变量仍然无法正确打印出来。然而,它们在 while 循环之前工作。这很混乱。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-07
  • 2016-04-03
  • 1970-01-01
  • 1970-01-01
  • 2012-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多