我是java编程新手。我正在尝试创建一个银行系统登录,在输入错误的密码 3 次后锁定用户。我正在尝试合并两段代码。知道为什么“PIN 码错误。再试一次”在控制台中出现两次吗?
ATM类
import java.util.Scanner;
public class ATM {
public static void useATM(BankAccount bankAccount) {
Scanner scanner = new Scanner(System.in);
char option = '\0';
do {
Menu.showMenu();
option = scanner.next().charAt(0);
switch (option) {
case 'A':
System.out.println(bankAccount.getBalance());
break;
case 'B':
System.out.println("Enter an amount to deposit: ");
int amountToDeposit = scanner.nextInt();
bankAccount.deposit(amountToDeposit);
break;
case 'C':
System.out.println("Enter an amount to withdraw: ");
int amountToWithdraw = scanner.nextInt();
bankAccount.withdraw(amountToWithdraw);
break;
case 'X':
System.out.println("The transaction is over. ");
break;
default:
System.out.println("Not a valid option. Choose another option.");
break;
}
} while (option != 'X');
}
}
BankAccount 类
public class BankAccount {
String IBAN;
int balance;
String pin;
public BankAccount(String IBAN, int balance, String pin) {
this.IBAN = IBAN;
this.balance = balance;
this.pin = pin;
}
public int getBalance() {
return this.balance;
}
public void deposit(int amount) {
this.balance = this.balance + amount;
}
public void withdraw(int amount) {
if (amount <= this.balance) {
this.balance = this.balance - amount;
System.out.println("You withdrew " + amount);
} else {
System.out.println("Not enough money. ");
}
}
}
BankingSystemWithPin 主类
import java.util.Scanner;
public class BankingSystemWithPin {
public static void main(String[] args) {
BankAccount bankAccount1 = new BankAccount("RO29455302311322", 200, "1234");
BankAccount bankAccount2 = new BankAccount("RO43593530521134", 600, "7530");
BankAccount[] bankAccounts = {bankAccount1, bankAccount2};
Scanner scanner = new Scanner(System.in);
Menu.welcome();
String pin = scanner.nextLine();
BankAccount currentBankAccount = BankingSystemWithPin.getBankAccountByPin(bankAccounts, pin);
ATM.useATM(currentBankAccount);
}
public static BankAccount getBankAccountByPin(BankAccount[] bankAccounts, String pin) {
for (BankAccount bankAccount : bankAccounts) {
if (bankAccount.pin.equals(pin)) {
return bankAccount;
} else if (!bankAccount.pin.equals(pin) ) {
System.out.println("Wrong Pin. Try Again.");
}
}
return null;
}
}
菜单类
public class Menu {
public static void showMenu() {
System.out.println("Enter an option: ");
System.out.println("A. Check balance ");
System.out.println("B. Deposit ");
System.out.println("C. Withdraw ");
System.out.println("X. Exit");
}
public static void welcome() {
System.out.println("Welcome! ");
System.out.println("Please insert your pin: ");
}
}
对于下一段代码,我正在尝试将其与我的登录系统合并。将其合并到主代码中的正确方法是什么?我应该尝试将其粘贴到 BanckAccount 类中,还是创建一个方法在 main 中调用它?
import java.util.Scanner;
public class PinLockout {
Scanner scanner = new Scanner(System.in);
int pin = 1234;
int tries = 0;
System.out.println("ENTER YOUR PIN: ");
int entry = scanner.nextInt();
tries++;
while (entry != pin && tries < 3) {
System.out.println("\nINCORRECT PIN. TRY AGAIN.");
System.out.println("ENTER YOUR PIN: ");
entry = scanner.nextInt();
tries++;
}
if (entry == pin)
System.out.println("\nPIN ACCEPTED. ACCESS GRANTED.");
else if (tries >= 3)
System.out.println("\nYOU HAVE RUN OUT OF TRIES. ACCOUNT LOCKED.");
}
}
}
最佳答案
知道为什么“PIN 码错误。再试一次”在控制台中出现两次吗?
是的...在您的 BankingSystemWithPin.getBankAccountByPin() 方法中,您使用 for
循环来迭代不同的银行帐户以查找相关的 PIN 码。这对于您目前的特定用例来说很好,但是您确实需要删除 else if{}
代码块,原因如下:
例如,如果您有 10 个特定帐户,并且每个帐户都包含一个唯一的 PIN 码,并且输入的 PIN 码与第五个帐户相关,则在每次迭代时直至第 5 个帐户,else if
条件满足,因此输出 Wrong Pin。再试一次。
。第五次迭代保存正确的 PIN,然后使用 returnbankAccount;
退出该方法。您将在控制台窗口中看到的是:
Wrong Pin. Try Again.
Wrong Pin. Try Again.
Wrong Pin. Try Again.
Wrong Pin. Try Again.
Enter an option:
A. Check balance
B. Deposit
C. Withdraw
X. Exit
您不希望 for
循环中出现 else if
代码块,因此只需删除它即可。相反,请将以下代码行直接放置在 for
循环 block 的之后:
System.out.println("Wrong Pin. Try Again.");
请记住,因为您无论如何都会在 for
循环中退出该方法,所以如果可以找到与银行帐户相关的正确 PIN 码,则上面的行将永远到达。仅当无法找到所提供的 PIN 码时才能到达该地址。您的 getBankAccountByPin() 方法应如下所示:
public static BankAccount getBankAccountByPin(BankAccount[] bankAccounts, String pin) {
for (BankAccount bankAccount : bankAccounts) {
if (bankAccount.pin.equals(pin)) {
System.out.println();
System.out.println("Account Number: " + bankAccount.IBAN);
return bankAccount;
}
}
System.err.println("Wrong PIN. Try Again.");
System.err.println();
return null;
}
这还不是全部......在调用上述方法之后继续之前,您需要确保它实际上提供了银行帐号。毕竟,如果提供的 PIN 码错误,则不会有银行帐号,而是会返回 null,并且您不想继续使用 null。在显示菜单之前,您需要验证是否确实获取了银行帐号。为此,您需要在 while
循环中调用 getBankAccountByPin() 方法,如下所示:
import java.util.Scanner;
public class BankingSystemWithPin {
private static int pinAttempts = 0;
public static void main(String[] args) {
BankAccount bankAccount1 = new BankAccount("RO29455302311322", 200, "1234");
BankAccount bankAccount2 = new BankAccount("RO43593530521134", 600, "7530");
BankAccount[] bankAccounts = {bankAccount1, bankAccount2};
Scanner scanner = new Scanner(System.in);
BankAccount currentBankAccount = null;
while (currentBankAccount == null) {
pinAttempts++;
if (pinAttempts > 3) {
System.err.println();
System.err.println("You have exceeded the allowable number of login attempts!");
System.err.println("The transaction is over. ");
System.exit(0);
}
Menu.welcome();
String pin = scanner.nextLine();
currentBankAccount = BankingSystemWithPin.getBankAccountByPin(bankAccounts, pin);
}
// PIN correct and account number acquired!
ATM.useATM(currentBankAccount);
}
public static BankAccount getBankAccountByPin(BankAccount[] bankAccounts, String pin) {
for (BankAccount bankAccount : bankAccounts) {
if (bankAccount.pin.equals(pin)) {
System.out.println();
System.out.println("Account Number: " + bankAccount.IBAN);
return bankAccount;
}
}
System.err.println("Wrong Pin. Try Again.");
System.err.println();
return null;
}
}
现在,用于锁定用户。您如何知道要锁定哪个用户?无法锁定用户,原因很简单,因为不涉及 ATM 卡,您永远不知道要锁定谁。但是,您可以关闭应用程序并强制用户重新启动它,以便在三次失败的尝试后重试。
当您尝试验证 PIN 并获取与其相关的银行帐号时,这显然是最好的方法...BankingSystemWithPin 类。上面的代码还通过添加一个名为 pinAttempts 的私有(private)整数类成员变量并将对 getBankAccountByPin() 方法的调用包装在 while
中来演示这一点。环形。这使事情变得紧凑和简单。
关于Java - ATM 银行登录,尝试 3 次密码锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68134810/