Застрял в создании объекта через цикл for

Я застрял в создании объекта для учетной записи, и я не знаю, где проблема. Мой вывод показывает только последнее введенное значение. Я хотел бы увидеть напечатанные детали (особенно разные идентификаторы), которые я создал, и я не знаю, как это сделать.

Пожалуйста, проверьте мой код, потому что я думаю, что в моем цикле есть ошибка, в некоторой степени отображаются сообщения на дисплее, которые не нужно отображать.

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;
        }
    }
}

2 ответа

Решение

Ваша проблема в том, что вы заполняете весь массив банковских счетов последним введенным банковским счетом.

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!");
}

Это должно исправить это. Как только это сработает, я предлагаю вам потратить некоторое время на создание функций, которые сделают ваш код более читабельным и пригодным для повторного использования.

Вы действительно должны рассмотреть возможность разбить ваш код на подпрограммы; его разбивка поможет разделить различные функции.

Что касается вашей ошибки; Я думаю, что вы говорите, что все аккаунты имеют одинаковую ценность, и что вы этого не ожидаете.

Ваш код выглядит следующим образом при создании новой учетной записи:

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

Каждый раз, когда вы запускаете эту строку, вы заменяете каждый элемент в вашем массиве новым объектом BankAccount.

Другие вопросы по тегам