
本文详解如何使用布尔变量(如 `pressureok`)作为状态标志,统一管理轮胎压力检测逻辑,在逐个检查四轮压力的同时动态跟踪整体合规性,并在最后输出汇总警告。
在轮胎压力检测程序中,单纯对每个轮胎独立判断并输出结果虽能运行,但缺乏状态聚合能力——即无法清晰表达“所有轮胎是否全部合格”这一业务语义。题目明确要求引入布尔变量 pressureOK 作为全局状态标志:初始设为 true,一旦任一轮胎压力超出 [35, 45] psi 范围,立即将其置为 false。这种方式不仅符合面向过程逻辑的清晰建模,也为后续扩展(如日志记录、异常处理或集成到更大系统)奠定基础。
以下是重构后的专业实现(关键改进已加注释):
import java.util.Scanner;
public class Tyrepressure {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 初始化全局状态标志:默认所有轮胎压力正常
boolean pressureOK = true;
System.out.println("Enter your tyre pressure of your right-front-tyre in pounds per square inch: ");
double rightFrontTyre = scanner.nextDouble();
System.out.println("Enter your tyre pressure of your left-front-tyre in pounds per square inch: ");
double leftFrontTyre = scanner.nextDouble();
System.out.println("Enter your tyre pressure of your right-back-tyre in pounds per square inch: ");
double rightBackTyre = scanner.nextDouble();
System.out.println("Enter your tyre pressure of your left-back-tyre in pounds per square inch: ");
double leftBackTyre = scanner.nextDouble();
System.out.println(); // 空行分隔输入与输出
// 检查右前胎 —— 若不合格,标记 pressureOK = false
if (rightFrontTyre >= 35 && rightFrontTyre <= 45) {
System.out.println("right-front-tyre = " + rightFrontTyre + " psi, your tyre pressure is okay!");
} else {
System.out.println("right-front-tyre = " + rightFrontTyre
+ " psi, your tyre pressure is critical, it is out of the allowed range!");
pressureOK = false; // ? 关键:单点失效即置为 false
}
System.out.println();
// 左前胎检查(同理)
if (leftFrontTyre >= 35 && leftFrontTyre <= 45) {
System.out.println("left-front-tyre = " + leftFrontTyre + " psi, your tyre pressure is okay!");
} else {
System.out.println("left-front-tyre = " + leftFrontTyre
+ " psi, your tyre pressure is critical, it is out of the allowed range!");
pressureOK = false;
}
System.out.println();
// 右后胎检查
if (rightBackTyre >= 35 && rightBackTyre <= 45) {
System.out.println("right-back-tyre = " + rightBackTyre + " psi, your tyre pressure is okay!");
} else {
System.out.println("right-back-tyre = " + rightBackTyre
+ " psi, your tyre pressure is critical, it is out of the allowed range!");
pressureOK = false;
}
System.out.println();
// 左后胎检查
if (leftBackTyre >= 35 && leftBackTyre <= 45) {
System.out.println("left-back-tyre = " + leftBackTyre + " psi, your tyre pressure is okay!");
} else {
System.out.println("left-back-tyre = " + leftBackTyre
+ " psi, your tyre pressure is critical, it is out of the allowed range!");
pressureOK = false;
}
System.out.println();
// ✅ 终止检查:仅当 pressureOK 仍为 true 时才不提示;否则输出最终警告
if (!pressureOK) {
System.out.println("⚠️ You have to check your tyre pressure!");
} else {
System.out.println("✅ All tyre pressures are within the safe range [35–45 psi].");
}
scanner.close(); // 善始善终:关闭 Scanner 防止资源泄漏
}
}核心要点说明:
- 单一布尔变量,全程复用:pressureOK 不是为每个轮胎创建新变量,而是作为共享状态标志,通过多次 pressureOK = false 实现“或逻辑”累积(即“任一失败 → 整体失败”)。
- 语义清晰:!pressureOK 直观表达“并非全部合格”,比原代码中冗长的 || 条件更易读、可维护。
- 避免重复计算:原答案建议为每胎声明独立布尔变量(如 pressureOkRightFront),虽可行,但违背题目“声明一个 pressureOK 变量”的本意,且增加内存开销与命名复杂度。
- 健壮性补充:添加了 scanner.close(),符合 Java 资源管理最佳实践。
? 小结:布尔标志(flag)是控制流程状态的经典模式。它让程序从“被动响应多个条件”升级为“主动维护一个业务状态”。掌握这种思维,是写出可读、可扩、可测代码的关键一步。










