如何不使用参数跨方法调用addFlight中定义的limitOfPassengers变量
问题解决方案
核心问题是变量作用域限制:limitOfpassengers 是 addFlight 方法内定义的局部变量,仅在该方法执行期间生效,方法执行结束后变量就会被回收,其他方法默认无法直接访问。你此前给第二个方法加参数后switch报错,是因为修改方法入参后,调用位置没有传入对应参数导致的,以下是两种可行的修复方案:
方案1:将载客量上限设置为类的成员变量(推荐)
直接把limitOfpassengers提取为Airway类的成员变量,同一个类内的所有非静态方法都可以直接访问,原有switch调用逻辑不需要做任何修改:
public class Airway { // 新增成员变量存储航班载客上限 private int limitOfPassengers; // 其他原有成员变量保持不变 // 修改后的addFlight方法 public void addFlight() { System.out.print("Enter passenger limit: "); // 直接给成员变量赋值 this.limitOfPassengers = ss.nextInt(); // 其余原有逻辑保持不变 } // 修改后的addPassengersToFlight方法,不需要加参数 public void addPassengersToFlight() { // 直接访问成员变量做校验 if (flight.getPassengerLimit() <= this.limitOfPassengers) { flight.addPassengers(passengers); System.out.println("New Passenger is Added!"); } else { System.out.println("!!!No More Space for Passenger!!!"); } // 其余原有逻辑保持不变 } // 其他原有方法保持不变 }
方案2:通过方法返回值+参数传递实现
如果不想新增类成员变量,可以修改方法定义,通过返回值传递载客上限,同步调整switch内的调用逻辑即可:
第一步:修改两个方法的定义
// addFlight方法修改返回值为int,返回输入的载客上限 public int addFlight() { int limitOfpassengers; System.out.print("Enter passenger limit: "); limitOfpassengers=ss.nextInt(); // 其余原有逻辑保持不变 return limitOfpassengers; } // addPassengersToFlight方法增加int类型入参 public void addPassengersToFlight(int limitOfpassengers) { if (flight.getPassengerLimit() <= limitOfpassengers) { flight.addPassengers(passengers); System.out.println("New Passenger is Added!"); } else { System.out.println("!!!No More Space for Passenger!!!"); } }
第二步:调整外层调用逻辑和switch代码
// 在外层调用类新增成员变量存储载客上限 private int passengerLimitCache; switch (choice) { case 1: { // 接收addFlight返回的载客上限存入缓存变量 passengerLimitCache = airway.addFlight(); break; } case 2: { System.out.println("\t\t\t\tPlease Enter Detail of Passenger"); // 把缓存的载客上限传入第二个方法 airway.addPassengersToFlight(passengerLimitCache); break; } // 其余case逻辑保持不变 }
注意:该方案需要确保用户先执行添加航班操作,再执行添加乘客操作,否则缓存变量会是默认值0导致校验逻辑异常,建议新增前置判断提示用户先创建航班。
内容的提问来源于stack exchange,提问作者F00
相关产品推荐
相关产品推荐

