Java电梯程序:实现断电转通电时打印提示消息的问题
问题分析
你的核心需求是电梯从断电状态切换为通电状态时才打印提示消息,但当前代码存在两个关键问题:
getPowerState方法使用的是传入的参数powerOn,而非类的静态成员变量powerOn,导致和电梯实际状态脱节;- 仅判断当前状态是否为
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
相关产品推荐
相关产品推荐

