Java通过重载方法与switch接收用户输入实现电影场次查询的问题
代码问题修复
你现有的代码存在两个需要先修正的逻辑问题:
- switch分支未加
break关键字,会发生分支穿透,无论匹配到哪一个case,最终都会执行到最后一个分支或default的逻辑 - 两个重载的
movieTime方法没有使用传入的参数,而是直接读取类的成员变量,不符合「传入查询条件返回对应场次」的设计逻辑
修复后的MovieTicket类代码
public class MovieTicket { private String actorName; private int startTime; public void setActorName(String actorName) { this.actorName = actorName; } public void setStartTime(int startTime) { this.startTime = startTime; } public String getActorName() { return actorName; } public int getStartTime() { return startTime; } // 按主演查询场次的重载方法 public String movieTime(String actor) { String runDate; switch (actor) { case "Jack Black": runDate = "0800"; break; case "Jon Bon": runDate = "1100"; break; case "Jan Ban": runDate = "1300"; break; case "Jim Bim": runDate = "1600"; break; default: runDate = "请输入以下主演之一查询:Jack Black、Jon Bon、Jan Ban、Jim Bim"; } return runDate; } // 按起始时间查询场次的重载方法 public int movieTime(int startTime) { int runDate; switch (startTime) { case 600: runDate= 1000; break; case 900: runDate = 1200; break; case 1400: runDate = 1700; break; case 1800: runDate = 2000; break; default: runDate = -1; // 自定义非法输入返回值,-1代表无对应场次 } return runDate; } }
重载方法调用方式
Java的重载方法会根据调用时传入的参数类型自动匹配对应逻辑:传入字符串类型参数就会调用按主演查询的方法,传入整数类型参数就会调用按时间查询的方法。
完整测试类代码
import java.util.Scanner; public class MovieTicketTestHarness { public static void main (String[] args) { MovieTicket mt1 = new MovieTicket(); Scanner userInput = new Scanner(System.in); // 选择查询方式 System.out.println("请选择查询方式:1-按主演查询 2-按起始时间查询"); int queryType = userInput.nextInt(); userInput.nextLine(); // 清理输入缓冲区的换行符 if (queryType == 1) { System.out.println("请输入主演姓名:"); String actorInput = userInput.nextLine(); String sessionResult = mt1.movieTime(actorInput); System.out.println("查询结果:" + sessionResult); } else if (queryType == 2) { System.out.println("请输入24小时制起始时间(整数,例如下午2点输入1400):"); int timeInput = userInput.nextInt(); int sessionResult = mt1.movieTime(timeInput); if (sessionResult == -1) { System.out.println("暂无对应场次,请输入600/900/1400/1800查询"); } else { System.out.println("查询结果:对应放映场次为" + sessionResult); } } else { System.out.println("输入的查询方式无效"); } userInput.close(); } }
内容的提问来源于stack exchange,提问作者Dragamaroon
相关产品推荐
相关产品推荐

