我正在做一个atm程序,很难弄清楚如何使它真正存入和取出。余额自动开始为$ 0,但我输入的内容却无法添加或减少,我在做什么错呢?public class ATM {static Scanner keyboard = new Scanner(System.in);static String acctNum, pwd, result;static double oldBalance, newBalance, deposit, withdraw;static int choose;public static void main(String[] args) { for (int run = 0; run < 3; run++) { System.out.println("Enter your account number"); acctNum = keyboard.nextLine(); System.out.println("Enter your account password"); pwd = keyboard.nextLine(); result = checkID(acctNum, pwd); if (!result.equals("ERROR")) { break; } else if (run == 2) {// you cannot try to log in anymore than 3 // times System.out.println("MAXIMUM TRIES EXCEEDED"); return; } } menu();}public static String checkID(String acctNum, Object pwd) { String result = "ERROR"; String a = "44567-5 mypassword 520.36"; String b = "1234567-6 anotherpassword 48.20"; String c = "4321-0 betterpassword 96.74"; if (acctNum.equals("44567-5") && pwd.equals("mypassword")) { result = "520.36"; } else if (acctNum.equals("1234567-6") && pwd.equals("anotherpassword")) { result = "48.20"; } else if (acctNum.equals("4321-0") && pwd.equals("betterpassword")) { result = "96.74"; } System.out.println(result); return result;}public static int menu() { System.out .println("Choose one of the following: \n1.Display Balance\n2.Deposit\n3.Withdraw\n4.Log Out"); choose = keyboard.nextInt(); if (choose == 1) {// 1. Display Balance displayBalance(); menu(); return 1; } if (choose == 2) {// 2. Deposit deposit(); menu(); return 2; } if (choose == 3) {// 3. Withdraw withdraw(); menu(); return 3; } if (choose == 4) {// 4. Log out System.out.println("You are logged out."); return 4; } if (choose <= 5) {// type in anything greater than 4 and you will get a // system error System.out.println("System Error"); menu(); return 5; } if (choose >= 1) {// type in anything less than 1 and you will get a // system error System.out.println("System Error"); menu(); return 6; } return choose;}public static double deposit() { System.out.println("How much would you like to deposit?"); deposit = keyboard.nextInt(); System.out.println((deposit + oldBalance)==newBalance);// deposit money into balance return 2;}public static double displayBalance() { System.out.println("Total balance is: $" + oldBalance); oldBalance = 0.00; return 1;}public static double withdraw() { System.out.println("How much would you like to withdraw?"); withdraw = keyboard.nextInt(); System.out.println(newBalance + withdraw);// withdraw money from balance return 3;}} 最佳答案 一些观察:您的类不应将oldBalance,存款和取款声明为全局变量。提款方法不能访问存款变量,反之亦然。尽可能多地限制变量的范围是一种好的编程习惯。因为在此方法之外确实不需要“存款”变量,所以绝对没有理由将其设置为全局变量。关于“当前余额”不能说相同。该类的所有方法都需要使用此变量:存款,取款,displayBalance等。因此,有充分的理由将其设置为全局(仍然,如果可以用较小的范围解决问题,则应这样做)。我不明白为什么deposit()和withdrawal()需要返回任何内容。deposit()和withdrawal()的最简单实现是简单地将用户输入添加到currentBalance并将其保存在currentBalance中。public void deposit(){ Scanner input = new Scanner(System.in); System.out.printn("Enter deposit amount: ); double amount = input.nextDouble(); System.out.println("Your deposit amount: " + amount); currentBalance += amount; System.out.println("Your new balance is: + currentBalance);}public void withdrawal(){ Scanner input = new Scanner(System.in); System.out.printn("Enter withdrawal amount: ); double amount = input.nextDouble(); System.out.println("Your withdrawal amount: " + amount); currentBalance -= amount; System.out.println("Your new balance is: + currentBalance);}您永远不会保存当前余额。 ==运算符是比较运算符,而不是赋值运算符。当您执行以下操作时:System.out.println((deposit + oldBalance)==newBalance);或像这样:System.out.println(newBalance + withdraw);您要做的只是将值传递给println()方法,而不是更新应该保持余额的变量。实际上,第一个应该打印false(除非deposit和oldBalance均为零)。如果看我的代码示例,currentBalance += amount;是currentBalance = currentBalance + amount;的简写,这意味着“将这个amount添加到currentBalance并将其存储在currentBalance中。由于我正在重用currentBalance,因此消除了对变量。
10-07 15:57
查看更多