You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

修正说明

  1. 遵循Java命名规范,将类名改为Main(首字母大写)
  2. 使用else if或switch确保同一时间只有一个分支执行,避免重复输出
  3. 严格按照规则匹配每个CD数量对应的积分
  4. 处理了边界场景:0或负数给0分,超过4张的情况可选择按最高积分计算,也可根据需求调整为提示用户输入合法范围

内容的提问来源于stack exchange,提问作者Hugo Nilsson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 13:28:14