Java新手求助:for循环内if语句处理及循环终止方式选择
Java循环调试与退出方式选择解答
一、循环逻辑的调试修正
你的代码里输入999终止循环的逻辑存在几个问题,会导致成绩统计结果错误:
- 输入999时,代码先把999加到了
total里再执行break,这会让总分包含无效的999值 - 不管是否提前终止循环,你都用固定的10作为平均分的分母,实际输入科目数不足10时,结果会严重偏差
- 第二个计算
sum的循环遍历了整个长度为10的数组,未输入的科目默认值是0,加上之前存入的999,会让average结果完全错误
修正后的核心逻辑应该是:先判断输入值是否为999,若是则直接退出循环,不把999计入总分和数组;同时记录实际输入的有效科目数量,用这个数量计算平均分。
二、break退出循环 vs 直接退出程序
用break退出循环更合适。
- 直接调用
System.exit(0)会立刻终止整个程序,后续的成绩统计、等级转换逻辑都无法执行,不符合你“输入999停止输入,但要计算已输入成绩”的需求 - break只是跳出当前的输入循环,程序可以继续执行后续的统计逻辑,完美匹配你的场景。只有当你需要输入999就直接结束整个程序(不需要任何统计)时,才考虑用
System.exit(0)
修正后的完整代码
package java_1.java; import java.util.Scanner; public class HelloWorld { public static void main(String[] args) { int marks[] = new int[10]; int i; float total = 0, avg; Scanner scanner = new Scanner(System.in); final int TERMINATE = 999; // 用常量定义终止符,代码更易读 int subjectCount = 0; // 记录实际输入的有效科目数量 for(i = 0; i < 10; i++) { System.out.print("Enter Marks of Subject " + (i+1) + ": "); int input = scanner.nextInt(); if(input == TERMINATE) { break; // 输入终止符,直接退出循环,不处理该值 } marks[i] = input; total += input; subjectCount++; // 有效科目数加1 } scanner.close(); // 只有输入了有效成绩才进行统计计算 if(subjectCount > 0) { avg = total / subjectCount; System.out.println("Average student grade out of the scores is: " + avg); if(avg >= 80) { System.out.println("Grade: A"); } else if(avg >= 60 && avg < 80) { System.out.println("Grade: B"); } else if(avg >= 40 && avg < 60) { System.out.println("Grade: C"); } else { System.out.println("Grade: D"); } } else { System.out.println("No valid marks entered."); } } }
内容的提问来源于stack exchange,提问作者Jamie Morrissey
相关产品推荐
相关产品推荐

