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

Java电梯程序:实现断电转通电时打印提示消息的问题

问题分析

你的核心需求是电梯从断电状态切换为通电状态时才打印提示消息,但当前代码存在两个关键问题:

  1. getPowerState方法使用的是传入的参数powerOn,而非类的静态成员变量powerOn,导致和电梯实际状态脱节;
  2. 仅判断当前状态是否为true,没有跟踪状态的变化过程,所以只要传入true就会重复打印。
解决方案

最合理的实现是在切换电源状态的方法中处理状态变化判断,因为只有切换动作才会触发通电的场景。以下是修改后的代码:

修改后的Elevator类

private static boolean powerOn = true;

// 切换电源状态,同时处理通电提示
public static void setPowerState() {
    boolean previousState = powerOn; // 记录切换前的状态
    powerOn = !powerOn; // 执行状态切换
    
    // 仅当从断电(false)切换到通电(true)时打印提示
    if (!previousState && powerOn) {
        System.out.println("Power Reinstated");
    }
}

// 可选:获取当前电源状态的方法
public static boolean getPowerState() {
    return powerOn;
}

调用示例

// 执行断电操作(此时powerOn从true变为false,无提示)
Elevator.setPowerState();

// 执行通电操作(此时powerOn从false变为true,打印"Power Reinstated")
Elevator.setPowerState();

// 再次切换(此时powerOn从true变为false,无提示)
Elevator.setPowerState();

// 再次通电(再次触发提示)
Elevator.setPowerState();
额外说明

如果一定要保留单独的方法处理打印逻辑,可以新增一个静态变量记录上一次状态,通过对比当前状态和上一次状态来触发打印,但这种方式不如直接在setPowerState中处理简洁。例如:

private static boolean powerOn = true;
private static boolean lastPowerState = true;

public static void setPowerState() {
    lastPowerState = powerOn;
    powerOn = !powerOn;
}

public static void printPowerReinstatedIfNeeded() {
    if (!lastPowerState && powerOn) {
        System.out.println("Power Reinstated");
        lastPowerState = powerOn; // 更新状态避免重复打印
    }
}

调用时:

Elevator.setPowerState(); // 断电
Elevator.setPowerState(); // 通电
Elevator.printPowerReinstatedIfNeeded(); // 打印提示
Elevator.printPowerReinstatedIfNeeded(); // 无输出(状态未变化)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 02:57:30