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
相关产品推荐
相关产品推荐

