求支持6门以上课程的简易Java AKTS成绩计算器代码
搞定任意课程数的AKTS成绩计算器
看起来你已经摸到门道了——用循环来处理多门课的输入,但之前的尝试没把输入的数据存下来,自然没法完成后续的加权计算。而且原来的代码重复创建Scanner、硬编码只支持6门课,确实不够灵活。
下面是完善后的简洁代码,支持任意数量的课程,逻辑清晰还容易维护:
package sa; import java.util.Scanner; public class GradeCalculator { public static void main(String[] args) { // 只需要一个Scanner就够了,不用每次输入都新建 Scanner scanner = new Scanner(System.in); // 先让用户输入课程数量 System.out.print("Ders sayısını giriniz: "); int courseCount = scanner.nextInt(); // 用数组来存每门课的成绩和AKTS值,这样输入后数据不会丢 float[] grades = new float[courseCount]; int[] aktsValues = new int[courseCount]; // 循环输入所有课程的成绩 System.out.println("Notları, gireceğiniz AKTS sırasıyla giriniz!"); for (int i = 0; i < courseCount; i++) { System.out.printf("%d. not: ", i + 1); grades[i] = scanner.nextFloat(); } // 循环输入对应课程的AKTS值 System.out.println("Notları girdiğiniz sıra ile, AKTS lerini giriniz!"); for (int i = 0; i < courseCount; i++) { System.out.printf("%d. AKTS: ", i + 1); aktsValues[i] = scanner.nextInt(); } // 计算加权总分和总AKTS float totalWeightedScore = 0; int totalAkts = 0; for (int i = 0; i < courseCount; i++) { totalWeightedScore += grades[i] * aktsValues[i]; totalAkts += aktsValues[i]; } // 输出结果,保留两位小数更直观 float weightedAverage = totalWeightedScore / totalAkts; System.out.printf("Hesaplanan ağırlıklı ortalama: %.2f%n", weightedAverage); // 用完记得关闭Scanner scanner.close(); } }
几个重要的改进点:
- 只用一个Scanner:之前的代码每输入一个值就新建Scanner,完全没必要,还容易出问题,一个就够用到最后
- 数组存储数据:这是你之前尝试的核心缺失——循环里的临时变量用完就没了,用数组把每门课的成绩和AKTS存起来,后面计算的时候才能遍历使用
- 无课程数量限制:用户输入多少门课就处理多少,再也不用局限于6门
- 清晰的逻辑拆分:输入成绩、输入AKTS、计算结果分成三个独立的循环,代码读起来一目了然
- 美观的输出:用
printf格式化输出平均分,保留两位小数,看起来更专业
补充说明:
如果担心用户输入非数字的情况,还可以加个输入验证(比如用hasNextFloat()判断),不过如果是课程作业的话,上面的代码应该完全够用了。
内容的提问来源于stack exchange,提问作者San Diego
相关产品推荐
相关产品推荐

