二重循环之在ATM上取款
问题:假设一个简单的在ATM的取款如下:首先提示用户输入密码(password),最多只能输入三次,超过三次则提示用户“密码错误,请取卡”,结束交易。如果用户密码正确,再提示用户输入金额(amount),ATM只能输出100元的纸币,一次取钱数要求最低0元,最高1000元。如果用户输入的金额符合上述的要求,则打印输出用户取的钱数,最后提示用户“交易完成,请取卡“,否则提示用户重新输入金额,假设用户密码是”111111“。
代码如下:(代码有瑕疵,大佬觉得应该怎么该好呢)
package com;
import java.util.Scanner
public class Demo13 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
//外层循环控制输入密码的次数
for(int i=0;i<3;i++) {
String password = null;
int amount = 0;
System.out.println("请输入密码:");
password = input.next();
if(!"111111".equals(password)) {
System.out.println("密码错误");
continue;
}
if("111111".equals(password)) {
System.out.println("密码正确,请输入取款金额:");
}
for(int j=0;j<1000;j++) {
amount = input.nextInt();
if(amount<=1000 && amount>=100) {
System.out.println("取款金额为:"+amount);
System.out.println("交易完成,请取卡!");
break;
}else {
System.out.println("请重新输入金额:");
continue;
}
}
}
System.out.println("密码错误,请取卡");
}
}
修改后的代码:
package com;
import java.util.Scanner;
public class Demo13 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String correctPassword = "111111";
boolean passwordCorrect = false;
//外层循环控制输入密码的次数
for(int i=0;i<3 && !passwordCorrect;i++) { //这里修改后,就不会出现重复输入密码的问题
String password = null;
System.out.println("请输入密码:");
password = input.next();
if(!correctPassword.equals(password)) {
System.out.println("密码错误");
}else{
passwordCorrect = true;
int amount=0;
//内层循环控制输入取款金额
while(true) {
System.out.println("密码正确,请输入取款金额:");
amount = input.nextInt();
if(amount<=1000 && amount>=100) {
System.out.println("取款金额为:"+amount);
System.out.println("交易完成,请取卡!");
break;
}else {
System.out.println("请重新输入金额(100~1000之间):");
}
}
}
}
if(!passwordCorrect){
System.out.print("密码错误,请取卡!");
}
input.close();
}
}