Java积分计算程序调试求助:输入CD数量匹配对应积分
问题排查与修正方案
嘿,我帮你理清代码里的问题啦,咱们一步步来解决:
原代码的核心错误
- 条件判断逻辑完全错位:你写的判断范围和积分规则完全不匹配,比如
if (variable < 1)会匹配0和负数,但规则里1张才对应5积分;variable < 2会匹配0、1,却输出15积分,完全不符合要求。而且variable > 3对应30积分,但规则里3张才是30,4张应该是60,这完全搞反了。 - 独立if导致重复/错误输出:每个if都是单独判断的,比如输入-1时,会同时触发
variable < 0和variable < 1,导致两次输出;输入1时会触发variable < 2,错误输出15分。 - 未覆盖全部合法场景:输入3张时,代码里没有对应的判断,不会输出任何积分;输入4张时会触发
variable >3,错误输出30分。
修正后的代码(两种实现方式)
方式一:使用else if分支(直观易懂)
import java.util.Scanner; public class Main { // 遵循Java规范,类名首字母大写 public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int cdCount; System.out.println("Please write the number of CDs you bought:"); cdCount = scanner.nextInt(); int points = 0; // 按规则匹配积分,同时处理边界情况 if (cdCount <= 0) { points = 0; } else if (cdCount == 1) { points = 5; } else if (cdCount == 2) { points = 15; } else if (cdCount == 3) { points = 30; } else if (cdCount >= 4) { // 若购买超过4张,这里按最高积分60计算,也可改成提示超出规则范围 points = 60; // 可选:添加提示 System.out.println("Note: Maximum points for 4 CDs applied."); } System.out.println("You have " + points + " points"); } }
方式二:使用switch语句(更清晰的分支管理)
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int cdCount; System.out.println("Please write the number of CDs you bought:"); cdCount = scanner.nextInt(); int points = 0; switch (cdCount) { case 1: points = 5; break; case 2: points = 15; break; case 3: points = 30; break; case 4: points = 60; break; default: // 处理0、负数或超过4张的情况 if (cdCount > 4) { points = 60; // 可选:System.out.println("Only up to 4 CDs qualify for maximum points."); } else { points = 0; } break; } System.out.println("You have " + points + " points"); } }
修正说明
- 遵循Java命名规范,将类名改为
Main(首字母大写) - 使用
else if或switch确保同一时间只有一个分支执行,避免重复输出 - 严格按照规则匹配每个CD数量对应的积分
- 处理了边界场景:0或负数给0分,超过4张的情况可选择按最高积分计算,也可根据需求调整为提示用户输入合法范围
内容的提问来源于stack exchange,提问作者Hugo Nilsson
相关产品推荐
相关产品推荐

