2014-10-02 88 views
-4

我被困在創建一個帳戶的對象中,我不知道問題出在哪裏。我的輸出只顯示最近輸入的值。我想看看我創建的打印細節(特別是不同的ID),我不知道如何去做。通過for循環創建對象時遇到困難

請檢查我的代碼,因爲我認爲我的循環有一個bug,有點顯示不需要顯示的顯示消息。

BankSystem.java:

import java.io.*; 
import java.util.Scanner; 

public class BankSystem { 

    public static void main(String[] args) throws IOException { 
     Scanner in = new Scanner(System.in); 
     BankAccount account[] = new BankAccount[5]; 
     BankClient client[] = new BankClient[5]; 
     BankSystem myBankSystem = new BankSystem(); 
     String MainMenu; 

     do { 
      System.out.println(""); 
      System.out.println("------PLP BANK SYSTEM------"); 
      System.out.println("Main Menu: "); 
      System.out.println("[A]ccount Management"); 
      System.out.println("[C]lient Management"); 
      System.out.println("[Q]uit"); 
      System.out.println(""); 
      System.out.print("Please select letter: "); 
      MainMenu = in.nextLine(); 

      switch (MainMenu.toLowerCase()) { 
       case "a": 
        System.out.println(""); 
        System.out.println("------PLP BANK SYSTEM------"); 
        System.out.println("Account Management:"); 
        System.out.println("[N]ew Account"); 
        System.out.println("[A]Apply Interest to All Accounts"); 
        System.out.println("[L]ist All Accounts"); 
        System.out.println("[F]ind an Account"); 
        System.out.println("[D]eposit to an Account"); 
        System.out.println("[W]ithdraw from an Account"); 
        System.out.println("[R]eturn to Main Menu"); 
        System.out.println(""); 
        System.out.print("Please select letter: "); 
        String AccountManagement = in.nextLine(); 

        switch (AccountManagement.toLowerCase()) { 
         case "n": //NEW ACCOUNT  
          System.out.print("Please input your desired ID number: "); 
          int id = in.nextInt(); 
          System.out.print("Please input your desired Balance: "); 
          double balance = in.nextDouble(); 
          System.out.print("Please input your desired Interest Rate: "); 
          double interestRate = in.nextDouble(); 

          // IS THE PROBLEM IS HERE ON MY LOOP?         
          for (int i=0; i<account.length; i++) { 
           account[i] = new BankAccount(id, balance, interestRate); 
          }   

          break;            
         case "a": //APPLY INTEREST TO ALL ACCOUNTS 
          System.out.println("For all accounts, compute and compound:"); 
          System.out.println("[M]onthly"); 
          System.out.println("[Q]uarterly"); 
          System.out.println("[A]nnually"); 
          System.out.println("[C]ancel"); 

          break;       
         case "l": //LIST ID NUMBERS OF ALL ACCOUNTS 
          System.out.println("List of all Accounts: "); 
          account[1].printDetails(); // OR THE PROBLEM IS HERE? 
          account[2].printDetails(); 

          break;        
         case "f": //FIND ACCOUNT 
          System.out.println("Enter ID number: "); 

          break;        
         case "d": //DEPOSIT 
          System.out.println("Enter ID number: "); 
          System.out.println("Enter Deposit amount: "); 

          break;        
         case "w": //WITHDRAW 
          System.out.println("Enter ID number: ");        
          System.out.println("Enter Withdraw amount: "); 

          break;       
         case "r": // RETURN 
          break;      
        }                 
       case "c": 
        System.out.println(""); 
        System.out.println("------PLP BANK SYSTEM------"); 
        System.out.println("Client Management:"); 
        System.out.println("[N]ew Client"); 
        System.out.println("[L]List All Clients"); 
        System.out.println("[F]ind a Client"); 
        System.out.println("[R]eturn to Main Menu"); 
        System.out.println(""); 
        System.out.print("Please select letter: "); 
        String ClientManagement = in.nextLine(); 

        switch (ClientManagement.toLowerCase()) {        
         case "n": //NEW CLIENT         
          System.out.println("Enter ID number: "); 
          System.out.println("Please input your Name: "); 
          System.out.println("Please input your account ID number: "); 

          break;         
         case "l": //LIST ALL CLIENT 
          break;         
         case "f": //FIND A CLIENT 
          System.out.println("Enter ID number: "); 

          break;       
         case "r": 
          break;         
         default: 
          System.out.println("Invalid entry, Please try again!"); 
          break;        
        }                    
       default: 
        System.out.println("Invalid entry, Please try again!"); 
      } 
     } while (!MainMenu.equals("q")); 

     System.out.println("Thank you for using my program!"); 
    } 
} 

BankAccount.java:

public class BankAccount { 
    private double balance; 
    private double interestRate; 
    private int id; 

    public BankAccount (int id, double initialDeposit, double initialIntRate){ 
     //Constructor 

     this.id=id; 
     this.balance=initialDeposit; 
     this.interestRate=initialIntRate;  
    } 

    public double getBalance(){ 
     return balance; 
    } 

    public double getInterestRate(){ 
     return interestRate; 
    } 

    public int getIDNumber(){ 
     return id; 
    } 

    public void printDetails() { 
     System.out.println("ID Number is: " +id); 
     System.out.println("Current balance is: "+balance); 
     System.out.println("Interest rate is: "+interestRate+"%"); 
    } 

    public double computeMonthlyInterest(){   
     interestRate=balance*interestRate;    
     return interestRate; 
    } 

    public void applyMonthlyInterest(){ 
     this.balance=balance+interestRate;   
    } 

    public void applyQuarterlyInterest(){ 
     this.balance=balance+(interestRate*3); 
    } 

    public void applyAnnualInterest(){ 
     this.balance=balance+(interestRate*12);   
    } 

    public void deposit(double amount){ 
     this.balance += amount; 
    } 

    public boolean withdraw (double amount) { 
     if (amount>balance) { 
      System.out.println("Withdraw amount is more than balance, Please try again."); 
      return false; 
     } 
     else 
     { 
      this.balance -= amount; 
      return true; 
     } 
    } 
} 
+0

請縮進您的代碼。目前幾乎不可能閱讀。並且請更加珍貴地描述你的問題(期望的行爲等等) – Leistungsabfall 2014-10-02 17:20:03

+0

你的'switch'結構在'case'語句之間沒有'break',並且有一個'while'缺少一個主體(在第一個代碼中snippet) – msrd0 2014-10-02 17:23:30

+0

縮小問題範圍。當然,大部分代碼與問題無關。正如其他人所說,請花時間格式化並縮進您的代碼。 – tnw 2014-10-02 17:24:48

回答

0

你的問題是你用最新輸入的銀行賬戶填充整個銀行賬戶。

for (int i=0; i<account.length; i++) { 
account[i] = new BankAccount(id, balance, interestRate); 

} 

不是接收你應該創建一個新的BankAccount銀行賬戶信息和數組的索引之後應該是銀行的電流量佔+1。

因此,在do語句之前創建一個變量來存儲當前的銀行賬戶數量。

int amountOfBankAccounts = 0; 

,使用該的的位置,並刪除了

if(amountOfBankAccounts < 5) { 
    account[amountOfBankAccounts++] = new BankAccount(id, balance, interestRate); 
} else { 
    System.out.println("Can not create a new account anymore, array is full!"); 
} 

這應該修復它。一旦有效,我建議你花一些時間來創建函數,使你的代碼更具可讀性和可重用性。

+0

謝謝先生juru。已經試過了,這解決了我的問題 – 2014-10-02 17:45:08

+0

解決答案之一,謝謝。 – Juru 2014-10-02 17:47:28

+0

如何標記先生juru。對不起,我只是新來的。 ,我可以要求1最後一件事。如何查找if語句以查找帳號ID號碼。 – 2014-10-02 17:52:42

2

你真的應該考慮除了打破你的代碼子程序;分解它將有助於劃分不同的功能。

至於你的bug;我想你是說所有的賬戶都有相同的價值,而你並不期待這一點。

你的代碼如下,創建一個新帳戶時:

for (int i=0; i<account.length; i++) { 
    account[i] = new BankAccount(id, balance, interestRate); 
} 

你運行該行每一次,你是一個新的BankAccount對象替換您的陣列中的每個元素。

+0

我應該替換哪些代碼?我想做出不同的帳戶,而不是替換幾乎花了3個小時尋找這個 – 2014-10-02 17:34:01

+0

感謝開明傑米。我現在知道該怎麼辦 – 2014-10-02 17:45:40

+0

您還應該考慮將您的銀行賬戶對象放入列表中,而不是固定大小的數組。查看javadoc的集合,如ArrayList或HashMap。 – Jamie 2014-10-02 20:58:19