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

Java中如何将if-else分支转换为switch语句?求修正错误

Java if-else转switch语句的错误修正

我尝试把一段根据场馆计算总价的Java if-else代码转换为switch语句,但自己写的switch代码无法正常运行,作为Java新手,希望能找出错误并修正。

原if-else代码

double totalPrice = 0.0;
if (venue.equals("Rod Laver")) {
    totalPrice = 225.25 * numOfTickets;
} else if (venue.equals("Margaret Court")) {
    totalPrice = 177.75 * numOfTickets;
} else if (venue.equals("John Cain")) {
    totalPrice = 145.50 * numOfTickets;
} else {
    System.out.println("Invalid venue entered");
     // Exit program if venue is invalid
}

// Display the total price to the user
System.out.printf("\nHave a wonderful day at the %s venue.\n\n", venue);
System.out.printf("Your total price is $%.2f.\n\n", totalPrice);

我编写的switch代码(无法正常运行)

switch (venue) {
    case venue:
    System.out.println("Rod Laver");
    totalPrice = 225.25 * numOfTickets;
    break;

    case 2:
    System.out.println("Margaret Court");
    totalPrice = 177.75 * numOfTickets;
    break;

    case 3:
    System.out.println("John Cain");
    totalPrice = 145.50 * numOfTickets;
    break;

    default:
    System.out.println("Invalid venue entered");
    break;
}

// Display the total price to the user
System.out.printf("\nHave a wonderful day at the %s venue.\n\n", venue);
System.out.printf("Your total price is $%.2f.\n\n", totalPrice);

错误分析

你的switch代码存在三个关键问题:

  1. case值类型不匹配且错误:venue是字符串类型,case必须使用对应的字符串常量(比如"Rod Laver"),而你写的case venue是变量(不符合switch的case必须是常量的要求),case 2、case 3是整数,和字符串类型完全不匹配,编译器会直接报错。
  2. 多余的输出语句:原if-else里没有输出场馆名称的逻辑,你加的System.out.println("Rod Laver");这类语句是多余的,会导致不必要的输出。
  3. 未处理无效场馆的退出逻辑:原代码注释里提到无效场馆时要退出程序,但你的switch里只是执行break,之后会继续执行后面的价格输出语句,这不符合原逻辑。

修正后的switch代码

double totalPrice = 0.0;

switch (venue) {
    case "Rod Laver":
        totalPrice = 225.25 * numOfTickets;
        break;
    case "Margaret Court":
        totalPrice = 177.75 * numOfTickets;
        break;
    case "John Cain":
        totalPrice = 145.50 * numOfTickets;
        break;
    default:
        System.out.println("Invalid venue entered");
        // 退出程序,1表示异常退出状态码
        System.exit(1);
}

// 只有场馆有效时才执行输出
System.out.printf("\nHave a wonderful day at the %s venue.\n\n", venue);
System.out.printf("Your total price is $%.2f.\n\n", totalPrice);

说明:

  • case值改为对应的字符串常量,和switch变量venue的类型完全匹配。
  • 移除了多余的场馆名称输出语句,保持和原if-else逻辑一致。
  • 在default分支中加入System.exit(1)实现程序退出,避免无效场馆时执行后续的价格输出代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 21:45:24