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代码存在三个关键问题:
- case值类型不匹配且错误:
venue是字符串类型,case必须使用对应的字符串常量(比如"Rod Laver"),而你写的case venue是变量(不符合switch的case必须是常量的要求),case 2、case 3是整数,和字符串类型完全不匹配,编译器会直接报错。 - 多余的输出语句:原if-else里没有输出场馆名称的逻辑,你加的
System.out.println("Rod Laver");这类语句是多余的,会导致不必要的输出。 - 未处理无效场馆的退出逻辑:原代码注释里提到无效场馆时要退出程序,但你的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
相关产品推荐
相关产品推荐

