Java中的数组和银行帐户

时间:2014-08-16 04:24:23

标签: java arrays bank

我正在尝试编写一个简单的银行账户管理程序,该程序执行以下操作:

创建一个新帐户,其帐号和余额取自用户并存储在数组中 选择一个帐户(来自数组) 删除所选帐户 选择提款和存款。

问题:我不明白我的错误是什么。

我尝试使用不同类型的数组进行帐号和余额存储,但我还没有找到答案。我搜索Web和Stackoverflow以获取参考,文档,简单示例,但找不到任何(我发现的那些,使用了一些我还没有学过的命令和东西,所以我可以理解它们是如何工作的)。我是初学者,我还在学习,并希望得到一些建议。谢谢!

//Bank account class
public class account {
private int ANumber;
private double balance;

public account(double initialBalance, int accno) {
    balance = initialBalance;
    ANumber = accno;
}

public void deposit (double u_amm){
    balance += u_amm;
}

public double withdraw(double amount) {
    balance -= amount;
    return amount;
}

public double getBalance() {
    return balance;
}
public int getAccount(){
    return ANumber;
}
}

这是主类

 import java.util.Scanner;
 // main class
 public class bankmain {
 public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    // Menu starts from here
    Scanner input = new Scanner(System.in);
    System.out.println("Enter the option for the operation you need:");
    System.out.println("****************************************************");
    System.out.println("[ Options: ne - New Account de - Delete Account ]");
    System.out.println("[       dp - Deposit    wi - Withdraw      ]");
    System.out.println("[           se - Select Account ex - Quit      ]");
    System.out.println("****************************************************");
    System.out.print("> ");  //indicator for user input
    String choice = input.next();
    //Options
    while(true){
  if(choice == "ne"){
    int nacc;
    int bal;
    int [][]array = new int[nacc][bal];   // Array for account and balance
    System.out.print("Insert account number: ");
    nacc =input.nextInt(); //-- Input nr for array insertion
    System.out.print("Enter initial balance: ");
    bal=input.nextInt(); //-- Input nr for array insertion
    System.out.println("Current account: " + nacc + " " +  "Balance " + bal);
    break;
  }
  // account selection      
  if(choice.equals("se")){
    System.out.println("Enter number of account to be selected: ");
    //user input for account nr from array
    System.out.println("Account closed.");
  }     
  //close account
  if(choice.equals("de")){
    //array selected for closing
    System.out.println("Account closed.");
  }
  // deposit
  if(choice.equals("dp")){
    System.out.print("Enter amount to deposit:  ");
    double amount = scan.nextDouble();
    if(amount <= 0){
        System.out.println("You must deposit an amount greater than 0.");
    } else {
        System.out.println("You have deposited " + (amount + account.getBalance()));
    }
  }
  // withdrawal     
  if(choice.equals("wi")){
    System.out.print("Enter amount to be withdrawn: ");
    double amount = scan.nextDouble();
        if (amount > account.balance()){ 
            System.out.println("You can't withdraw that amount!");
   } else if (amount <= account.balance()) {
    account.withdraw(amount);
    System.out.println("NewBalance = " + account.getBalance());
   }
   }
//quit 
if(choice == "ex"){
    System.exit(0);
        } 
    }   // end of menu loop
 }// end of main
 } // end of class

2 个答案:

答案 0 :(得分:2)

您的代码在许多级别上都是错误的 - 首先尝试处理您的格式和命名约定,这样您就不会学习糟糕的习惯。不要使用小的leters来命名类,尝试使用完整的单词来描述变量和字段,就像在Account.class示例中一样:

public class Account  {
    private Integer accountNumber;
    private Double balance;

    public Account(final Integer accountNumber, final Double initialBalance) {
        this.accountNumber = accountNumber;
        balance = initialBalance;
    }

    public Double deposit (double depositAmmount) {
        balance += depositAmmount;
        return balance;
    }

    public Double withdraw(double withdrawAmmount) {
        balance -= withdrawAmmount;
        return balance;
    }

    public Double getBalance() {
        return balance;
    }

    public Integer getAccountNumber() {
        return accountNumber;
    }
}

还尝试在所有代码中使用相同的格式(即括号后的空格),以便您阅读起来更简单。

现在 - 您的应用中出现了什么问题:

  1. 为您的帐户定义合适的持有人,即HashMap,其中包含有关所有帐户的信息,并且可以通过accountNumber找到它们。

    HashMap<Integer, Account> accountMap = new HashMap<Integer, Account>();

  2. 这个应该在你的while循环中,因为你希望你的用户做多个任务。您可以省略println,但用户必须返回到屏幕顶部才能看到选项。

    System.out.println("Enter the option for the operation you need:");
    System.out.println("****************************************************");
    System.out.println("[ Options: ne - New Account de - Delete Account ]");
    System.out.println("[       dp - Deposit    wi - Withdraw      ]");
    System.out.println("[           se - Select Account ex - Quit      ]");
    System.out.println("****************************************************");
    System.out.print("> ");  //indicator for user input
    String choice = input.nextLine();   
    System.out.println("Your choice: " + choice);
    
  3. 您不应该使用&#39; ==&#39;来比较字符串。运营商,因为它可能不会返回预期值。请查看:How do I compare strings in Java?What is the difference between == vs equals() in Java?。对于安全使用,对象等于,即:

    choice.equals("ne")
    
  4. 您没有创建帐户的地方:

    Account newAccount = new Account(newAccountNumber, initialBalance);
    
  5. 你没有使用if-else,只是如果有的话。它应该看起来更像(为什么要检查选择是否&#39;如果它已被发现是&#39; ne&#39;)

    if(choice.equals("ne")) {
        //doStuff
    } else if choice.equals("se") {
        //doStuff
    } //and so on.
    
  6. 如果您使用的是Java版本&gt; = 7,那么您可以使用开关来比较字符串而不是if-else。

  7. 没有错误选项的通知:

    } else {
        System.out.println("Wrong option chosen.");
    }
    
  8. 您没有关闭Scanner对象。这在这里并不重要,因为它在主要方法中并且将与它关闭,但是在使用它时总是关闭你的流,数据源等是很好的习惯问题:< / p>

    input.close(); 
    
  9. 所以整个代码看起来像这样:

    import java.util.HashMap;
    import java.util.Scanner;
    // main class
    public class BankAccount {
    
        public static void main(String[] args) {
    
            Scanner input = new Scanner(System.in);
            HashMap<Integer, Account> accountMap = new HashMap<Integer, Account>(); 
    
             //Options
            while(true) {
    
                System.out.println("Enter the option for the operation you need:");
                System.out.println("****************************************************");
                System.out.println("[ Options: ne - New Account de - Delete Account ]");
                System.out.println("[       dp - Deposit    wi - Withdraw      ]");
                System.out.println("[           se - Select Account ex - Quit      ]");
                System.out.println("****************************************************");
                System.out.print("> ");  //indicator for user input
    
                String choice = input.next();   
                System.out.println("Your choice: " + choice);
    
                if(choice.equals("ne")) {
                    Integer newAccountNumber;
                    Double initialBalance;
                    Account newAccount;
    
                    // Array for account and balance
                    System.out.print("Insert account number: ");
                    newAccountNumber = input.nextInt(); //-- Input nr for array insertion
                    System.out.print("Enter initial balance: ");
                    initialBalance=input.nextDouble(); //-- Input nr for array insertion
                    newAccount = new Account(newAccountNumber, initialBalance);
                    accountMap.put(newAccountNumber, newAccount);
                    System.out.println("New Account " + newAccountNumber + " created with balance: " + initialBalance);
                }
                //select account
                else if(choice.equals("se")) {
                    System.out.println("Enter number of account to be selected: ");
                    Integer accountToGetNumber = input.nextInt();
                    Account returnedAccount = accountMap.get(accountToGetNumber);
                    if (returnedAccount != null)
                    {
                        System.out.println("Account open. Current balance: " + returnedAccount.getBalance());
                    }
                    else
                    {
                        //user input for account nr from array
                        System.out.println("Account does not exist.");
                    }
                }
                //close account
                else if(choice.equals("de"))
                {
                    System.out.println("Enter number of account to be selected: ");
                    Integer accountToDeleteNumber = input.nextInt();
                    Account removedAccount = accountMap.remove(accountToDeleteNumber);
                    if (removedAccount != null)
                    {
                        System.out.println("Account " + removedAccount.getAccountNumber() + " has been closed with balance: " + removedAccount.getBalance());
                    }
                    else
                    {
                        //user input for account nr from array
                        System.out.println("Account does not exist.");
                    }
                }
                // deposit
                else if(choice.equals("dp")) {
                    System.out.println("Enter number of account to deposit: ");
                    Integer accountToDeposit = input.nextInt();
                    System.out.print("Enter amount to deposit:  ");
                    double amount = input.nextDouble();
                    if(amount <= 0){
                        System.out.println("You must deposit an amount greater than 0.");
                    } else {
                        accountMap.get(accountToDeposit).deposit(amount);
                        System.out.println("You have deposited " + (amount));
                        System.out.println("Current balance " + accountMap.get(accountToDeposit).getBalance());
                    }
                }
                // withdrawal     
                else if(choice.equals("wi")) {
                    System.out.println("Enter number of account to withdraw: ");
                    Integer accountToWithdraw = input.nextInt();
                    System.out.print("Enter amount to withdraw:  ");
                    double amount = input.nextDouble();
                    if(amount <= 0) {
                        System.out.println("You must deposit an amount greater than 0.");
                    } else {
                        accountMap.get(accountToWithdraw).withdraw(amount);
                        System.out.println("You have deposited " + (amount));
                        System.out.println("Current balance " + accountMap.get(accountToWithdraw).getBalance());
                    }
                }
                //quit 
                else if(choice.equals("ex")) {
                    break;
                } else {
                    System.out.println("Wrong option.");
                } //end of if
            } //end of loop
    
            input.close();
        } //end of main
     } //end of class
    

    还有很多需要改进的地方,即输入验证 - 但这应该适用于开始。

答案 1 :(得分:1)

您已经编写了上述代码,但它有很多错误。您需要了解The basics of Java programming

修改了您的程序以执行以下操作: -

  1. 创建新帐户。
  2. 选择现有帐户。
  3. 存款金额。
  4. 提款金额。
  5. 查看余额。
  6. 删除帐户。
  7. 退出。
  8. Account.java:

    /**
     * This class performs bank operations
    */
    public class Account {
        private int accNumber;
        private double balance;
    
        public Account(double initialBalance, int accNo) {
            balance = initialBalance;
            accNumber = accNo;
        }
    
        public void deposit(double amount) {
            balance += amount;
        }
    
        public double withdraw(double amount) {
            balance -= amount;
            return amount;
        }
    
        public double getBalance() {
            return balance;
        }
    
        public int getAccNumber() {
            return accNumber;
        }
    }
    

    BankMain.java:

    public class BankMain {
        private static double amount;
        private static ArrayList<Account> accountList = new ArrayList<>();
        private static Account selectedAccount;
        private static boolean flag = false;
    
        public static void main(String[] args) {
            Scanner scan = new Scanner(System.in);
            // Menu starts from here
            Scanner input = new Scanner(System.in);
            System.out.println("Enter the option for the operation you need:");
            System.out
                        .println("****************************************************");
            System.out
                    .println("[ Options: new - New Account del - Delete Account ]");
            System.out
                    .println("[       dp - Deposit    wi - Withdraw  bal - Check balance    ]");
            System.out
                    .println("[           se - Select Account exit - Quit      ]");
            System.out
                    .println("****************************************************");
            Account account = null;
            while (true) {
                System.out.println("> "); // indicator for user input
                String choice = input.next();
                // Options
                switch (choice) {
                    case "new":
                        // Create new account
                        int accNo = 0;
                        int bal = 0;
                        System.out.println("Enter account number : ");
                        accNo = input.nextInt();
                        System.out.println("Enter initial balance: ");
                        bal = input.nextInt();
                        System.out.println("Current account: " + accNo + " "
                            + "Balance " + bal);
                        account = new Account(bal, accNo);
                        accountList.add(account);
                        break;
                    case "se":
                        // select account
                        System.out
                            .println("Enter account number for further operations : ");
                        int selectedAcc = scan.nextInt();
                        System.out.println("Selected account : " + selectedAcc);
                        for (Object object : accountList) {
                            selectedAccount = (Account) object;
                            if (selectedAccount.getAccNumber() == selectedAcc) {
                                flag = true;
                                break;
                            } else {
                                flag = false;
                            }
                        }
                        if (!flag) {
                            System.out.println("Account doesn't exists.");
                        }
                        if (accountList.size() == 0) {
                            System.out.println("Zero account exists.");
                        }
                        break;
                    case "del":
                        // close account
                        System.out
                            .println("Enter account number for further operations : ");
                        int selectedAcc1 = scan.nextInt();
                        System.out.println("Selected account : " + selectedAcc1);
                        Iterator<Account> iterator = accountList.iterator();
                        while (iterator.hasNext()) {
                            selectedAccount = (Account) iterator.next();
                            if (selectedAccount.getAccNumber() == selectedAcc1) {
                                iterator.remove();
                                flag = true;
                                break;
                            }
                        }
                        if (!flag) {
                            System.out.println("Account doesn't exists.");
                        }
                        System.out.println("Account " + selectedAcc1 + " closed.");
                        break;
                    case "dp":
                        // Deposit amount
                        System.out.println("Enter amount to deposit :  ");
                        amount = scan.nextDouble();
                        if (amount <= 0) {
                            System.out
                                .println("You must deposit an amount greater than 0.");
                        } else {
                            if (flag) {
                                selectedAccount.deposit(amount);
                                System.out.println("You have deposited " + amount
                                    + ". Total balance : "
                                    + (selectedAccount.getBalance()));
                            } else {
                                System.out.println("Please select account number.");
                            }
                        }
                        break;
                    case "wi":
                        // Withdraw amount
                        System.out.println("Enter amount to be withdrawn: ");
                        amount = scan.nextDouble();
                        if (amount > account.getBalance() && amount <= 0) {
                            System.out.println("You can't withdraw that amount!");
                        } else if (amount <= selectedAccount.getBalance()) {
                            if (flag) {
                                selectedAccount.withdraw(amount);
                                System.out.println("You have withdraw : " + amount
                                    + " NewBalance : "
                                    + selectedAccount.getBalance());
                            } else {
                                System.out.println("Please select account number.");
                            }
                        }
                        break;
                    case "bal":
                        // check balance in selected account
                        if (flag) {
                            System.out.println("Your current account balance : "
                                + selectedAccount.getBalance());
                        } else {
                            System.out.println("Please select account number.");
                        }
                        break;
                    case "exit":
                    default:
                        // quit
                        System.out.println("Thank You. Visit Again!");
                        flag = false;
                        input.close();
                        scan.close();
                        System.exit(0);
                        break;
                }
            } // end of menu loop
        }// end of main
    } // end of class
    

    我已经测试了这个代码&amp;它工作正常。

    输出

    Enter the option for the operation you need:
    ****************************************************
    [ Options: new - New Account del - Delete Account ]
    [       dp - Deposit    wi - Withdraw  bal - Check balance    ]
    [           se - Select Account exit - Quit      ]
    ****************************************************
    > new
    Enter account number : 101
    Enter initial balance: 10000
    Current account: 101 Balance 10000
    > new
    Enter account number : 102
    Enter initial balance: 25000
    Current account: 102 Balance 25000
    > se
    Enter account number for further operations : 103
    Selected account : 103
    Account doesn't exists.
    > se
    Enter account number for further operations : 101
    Selected account : 101
    > bal
    Your current account balance : 10000.0
    > dp
    Enter amount to deposit :  2500
    You have deposited 2500.0. Total balance : 12500.0
    > wi
    Enter amount to be withdrawn: 500
    You have withdraw : 500.0 NewBalance : 12000.0
    > se
    Enter account number for further operations : 102
    Selected account : 102
    > bal
    Your current account balance : 25000.0
    > del
    Enter account number for further operations : 101
    Selected account : 101
    Account 101 closed.
    > se
    Enter account number for further operations : 101
    Selected account : 101
    Account doesn't exists.
    > exit
    Thank You. Visit Again!