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

Java代码纠错:修复if语句报错及游泳价格计算逻辑问题

修正游泳价格计算Java代码的语法与逻辑问题

原代码存在的核心问题:

  • 所有方法未包裹在类中,且缺少程序入口main方法,Java不允许在类外部直接调用方法
  • yesornodisability方法返回类型定义为void,但实际需要返回用户输入的"Yes/No"字符串
  • total()方法每次调用都返回初始值10,无法实现价格修改,需用变量存储动态价格
  • if/else if语句末尾多了分号,导致代码块与条件判断脱离,引发"else无对应if"编译错误
  • yesornodisability().equals("Yes")的条件判断缺少闭合括号,且重复调用输入方法会多次询问用户
  • 重复创建Scanner实例,造成资源浪费

修正后的完整代码:

import java.util.Scanner;

public class SwimmingPriceCalculator {
    // 复用同一个Scanner实例
    private static final Scanner scanner = new Scanner(System.in);

    public static int getAge() {
        System.out.println("How old are you? ");
        return Integer.parseInt(scanner.nextLine());
    }

    public static String getDisabilityStatus() {
        System.out.println("Are you registered disabled(Yes / No)? ");
        return scanner.nextLine();
    }

    public static void main(String[] args) {
        // 基础价格
        int price = 10;
        int age = getAge();
        String disabilityStatus = getDisabilityStatus();

        // 应用优惠规则(支持叠加,若需互斥可改为else if结构)
        if (age <= 18) {
            price /= 2; // 18岁及以下5折
        }
        if (age >= 65) {
            price -= 3; // 65岁及以上减3英镑
        }
        if ("Yes".equalsIgnoreCase(disabilityStatus)) {
            price -= 4; // 注册残疾减4英镑
        }

        // 确保价格不会低于0
        price = Math.max(price, 0);

        System.out.println("The swimming price for you is " + price + " pounds.");
        scanner.close();
    }
}

关键修改说明:

  • 将所有代码包裹在SwimmingPriceCalculator类中,添加main方法作为程序入口
  • 重命名方法使其语义更清晰,getAge()获取年龄,getDisabilityStatus()获取残疾状态
  • 复用同一个Scanner实例,避免重复创建,最后关闭释放资源
  • 先一次性获取用户输入的年龄和残疾状态,避免重复询问
  • 调整优惠逻辑为独立判断(若需优惠互斥,可改为else if结构)
  • 增加价格下限判断,防止出现负价格
  • 移除if语句末尾的多余分号,修正括号缺失问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 23:45:39