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

如何不使用参数跨方法调用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:24:04