有没有办法让 System.out.print 循环打印一次不同的东西?

时间:2021-02-05 21:52:23

标签: java loops

我对编码非常陌生,我的一个项目是创建一个程序,该程序使用 while 循环向用户询问测试成绩并找到平均值。我遇到的问题是,当它要求一年级时,我的老师希望它也只打印出“完成后输入 -1”以及一年级。他希望结果看起来像这样。


Test grade1? (Enter -1 when you are finished): random grade
Test grade2? random grade
Test Grade3? random grade
The average of your test grades is: average of all grades

目前,我将一年级作为单独的一行代码询问用户,并且不在循环中。有什么方法可以将它组合到循环中,并且仍然要求“完成后输入 -1”,但仅适用于第一级考试成绩?

P.s 对不起,如果我的代码很乱,我仍然不太擅长。

import java.util.Scanner;
public class U4D3 {
   public static void main(String[] args) {
   
   Scanner scan = new Scanner(System.in);
      System.out.print("Test grade 1? (Enter -1 when you're finished): ");
        int grade1 = scan.nextInt();
     
         int i = 2;
         int testCounter = 1;
         int sum = 0;
         boolean flag = true;
     
      while(flag) {
        System.out.print("Test grade " + i + "? ");
        int grades = scan.nextInt();
            if (grades == -1){  
                flag = false;
                break;
            }
        sum = grade1 + grades;
        grade1 = sum;
        i++;
        testCounter++;
           
        }
      System.out.println("The averages of your test grades is: " + (double)sum/testCounter);
   }
}

1 个答案:

答案 0 :(得分:2)

您可以使用 if 语句检查它是否是第一次测试,如果是这种情况,则显示附加消息。 您也可以去掉 i 变量并在它的位置使用 testCounter。您也不需要 flag,只需使用 break 就足够了。 在循环结束时,testCounter 将减一,因此您在计算平均值 ((testCounter - 1)) 时必须减一。

import java.util.Scanner;

public class U4D3 {
  public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    int testCounter = 1;
    int sum = 0;

    while (true) {
      System.out.print("Test grade " + testCounter + "? ");
      if (testCounter == 1)
        System.out.print("(Enter -1 when you're finished): ");
      int grade = scan.nextInt();
      if (grade == -1) {
        break;
      }
      sum += grade;
      testCounter++;
    }
    System.out.println("The averages of your test grades is: " + (double) sum / (testCounter - 1));
  }
}