首页 > 解决方案 > 有没有办法让 System.out.print 在循环中打印一次不同的东西?

问题描述

我对编码非常陌生,我的一个项目是创建一个程序,该程序使用 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”,但仅针对第一个测试成绩?

Ps 抱歉,如果我的代码非常混乱,我仍然不是很擅长。

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);
   }
}

标签: javaloops

解决方案


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

推荐阅读