我对编码非常陌生,我的一个项目是创建一个程序,该程序使用 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);
}
}
答案 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));
}
}