用while控制ATM主循环,用switch处理用户选择:1查询余额、2取款(校验余额/整百/日限额)、0退出;变量balance和dailyWithdrawn维护账户状态,running标志控制循环终止。

用 while 和 switch 实现 ATM 取款流程,核心是:用 while 控制主菜单循环,用 switch 处理用户选择的各类操作(查询余额、取款、退出等),同时配合变量维护账户状态。
主循环结构:用 while 保持 ATM 持续运行
ATM 需要一直等待用户操作,直到主动选择“退出”。常用布尔标志控制循环:
- 定义
boolean running = true; - 外层用
while (running)包裹整个交互逻辑 - 当用户选“退出”时,执行
running = false;,循环自然结束
菜单与分支:用 switch 处理用户输入选项
每次用户输入一个数字(如 1 表示查询,2 表示取款),用 switch 分发处理:
- case 1:打印当前余额(如
System.out.println("当前余额:" + balance);) - case 2:进入取款逻辑——先提示输入金额,再校验是否足够、是否为整百、是否在单日限额内
- case 0:设置
running = false;并打印“感谢使用” - default:提示“无效选项,请重试”
取款细节:校验不能少
真正取款不是简单减余额,需加安全检查:
立即学习“Java免费学习笔记(深入)”;
- 输入金额 ≤ 当前余额
- 金额 > 0 且是 100 的倍数(常见 ATM 限制)
- 可选:记录已取总额,防止单日超限(如当日最多取 5000)
- 校验失败时,不扣款,只提示原因(如“余额不足”或“请输入100的整数倍”)
完整骨架示例(关键逻辑,非完整可运行代码)
(仅展示核心结构,省略 Scanner 初始化和 import)
double balance = 10000.0;
int dailyWithdrawn = 0;
boolean running = true;
while (running) {
System.out.println("\n=== ATM 主菜单 ===");
System.out.println("1. 查询余额");
System.out.println("2. 取款");
System.out.println("0. 退出");
System.out.print("请选择操作:");
int choice = scanner.nextInt();
switch (choice) {
case 1:
System.out.println("当前余额:" + balance);
break;
case 2:
System.out.print("请输入取款金额:");
int amount = scanner.nextInt();
if (amount <= 0 || amount % 100 != 0) {
System.out.println("请输入大于0且为100整数倍的金额!");
} else if (amount > balance) {
System.out.println("余额不足!");
} else if (dailyWithdrawn + amount > 5000) {
System.out.println("当日取款已达上限!");
} else {
balance -= amount;
dailyWithdrawn += amount;
System.out.println("取款成功!取出:" + amount);
}
break;
case 0:
System.out.println("感谢使用,再见!");
running = false;
break;
default:
System.out.println("无效选项,请重新输入。");
}
}


















