Застрял в создании объекта через цикл 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.