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

Java ISP计费程序问题:if语句多输出及else报错求助

Java ISP计费程序问题修复

你的代码里存在两个核心问题,根源都是if语句末尾多余的分号:

问题原因分析

  1. 添加else报错:当你在if (hours_used <= 10);后面加分号时,这个分号会直接终止if的逻辑(等价于一个空语句),后面的{}变成了独立代码块,和前面的if没有关联。此时再添加else,编译器找不到对应的if,自然报错。
  2. 两个分支都执行:同样,两个if语句后的分号让条件判断失效,不管hours_used的值是多少,两个{}里的代码都会无条件执行,所以会同时打印两个账单金额。

修复后的完整代码

import java.util.Scanner;

// 修正类名,符合Java驼峰命名规范
public class InternetServiceProvider {

    public static void main(String[] args) {
        
        Scanner scanner = new Scanner(System.in);
        
        String packageChoice;
        int hoursUsed = 0;
        int additionalHours = 0;
        double additionalCharge = 0;
        double packageA = 9.95;
        double packageB = 13.95;
        double packageC = 19.95;
        int packATimeLim = 10;
        int packBTimeLim = 20;
        double packAAdditionalFee = 2.00;
        double packBAdditionalFee = 1.00;
        double totalBill = 0;
        
        System.out.println("你使用的是哪个套餐?");
        packageChoice = scanner.nextLine();
        
        switch (packageChoice) {
            case "c":
                System.out.printf("你的账单金额为:$%.2f/月%n", packageC);
                break;
            case "a":
                System.out.println("你使用了多少小时的网络?");
                hoursUsed = scanner.nextInt();
                
                // 去掉if条件后的分号,改用if-else结构确保只执行一个分支
                if (hoursUsed <= packATimeLim) {
                    System.out.printf("你的账单金额为:$%.2f/月%n", packageA);
                } else {
                    additionalHours = hoursUsed - packATimeLim;
                    additionalCharge = additionalHours * packAAdditionalFee;
                    totalBill = packageA + additionalCharge;
                    System.out.printf("你的账单金额为:$%.2f%n", totalBill);
                }
                break;
            // 补充case "b"的逻辑
            case "b":
                System.out.println("你使用了多少小时的网络?");
                hoursUsed = scanner.nextInt();
                if (hoursUsed <= packBTimeLim) {
                    System.out.printf("你的账单金额为:$%.2f/月%n", packageB);
                } else {
                    additionalHours = hoursUsed - packBTimeLim;
                    additionalCharge = additionalHours * packBAdditionalFee;
                    totalBill = packageB + additionalCharge;
                    System.out.printf("你的账单金额为:$%.2f%n", totalBill);
                }
                break;
            default:
                System.out.println("无效的套餐选择");
                break;
        }
        scanner.close();
    }
}

额外优化说明

  • 修正变量和类名的命名,符合Java驼峰命名规范,提升代码可读性
  • 使用printf格式化输出,确保金额显示两位小数,更贴合账单展示需求
  • 补充case "b"的逻辑和default分支,让程序逻辑更完整
  • 最后关闭Scanner资源,避免资源泄漏

运行示例(套餐a、11小时场景):

你使用的是哪个套餐?
a
你使用了多少小时的网络?
11
你的账单金额为:$11.95

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 01:36:05