2014-10-02 86 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