Проект, над которым я работаю, представляет собой банковский интерфейс с одним PatronList объектом, который сам содержит BankPatron объекты, содержащие BankAccount объекты. Проблема, с которой я столкнулся, заключается в том, что я не могу создать новые объекты. Основной метод использует только один объект PatronList, но любые объекты BankPatron или BankAccount, которые я пытаюсь создать, не являются таковыми, но по какой-то причине все равно будут выводить то, что у них есть. В моей программе все объекты уже созданы заранее и равны нулю. Для этого много кода, и я не уверен, что может быть необходимо, поэтому извините, если я публикую здесь слишком много.
Итак, меню интерфейса начинается с этого:
Чтобы добавить список покровителей, код в основном методе выглядит следующим образом:
if (option.equals("a"))
{
if (((pList.getBankPatron(0)==null)&&(pList.getBankPatron(1)==null)&&(pList.getBankPatron(2)==null)&&(pList.getBankPatron(3)==null)&&(pList.getBankPatron(4)==null)))
{
System.out.println("None.");
}
else
{
for(int i =0; i<=4;i++)
{
if ( pList.getBankPatron(i)!=null)
{
BankPatron u = pList.getBankPatron(i);
pList.patronInfo(u);}
}
}
}
Чтобы добавить покровителей, это:
if (option.equals("b"))
{
System.out.println("What is the patron's first name?");
String fname = scan.next();
System.out.println("Last name?");
String lname = scan.next();
System.out.println("Their salary?");
double salary = scan.nextDouble();
System.out.println("Their cash on hand?");
double cash = scan.nextDouble();
if (pList.addPatron(fname, lname, salary, cash))
{
System.out.println("Welcome to the bank.");
}
else
{
System.out.println("Bank line is full, sorry.");
}
}
Вот код класса BankPatron:
public class PatronList {
private BankPatron patronOne;
private BankPatron patronTwo;
private BankPatron patronThree;
private BankPatron patronFour;
private BankPatron patronFive;
public PatronList()
{
patronOne =null;
patronTwo =null;
patronThree =null;
patronFour =null;
patronFive =null;
}
public boolean addPatron(BankPatron e)
{
boolean success =false;
if (patronOne==null)
{
patronOne = e;
success =true;
}
else if (patronTwo==null)
{
patronTwo = e;
success =true;
}
else if (patronThree==null)
{
patronThree = e;
success =true;
}
else if (patronFour==null)
{
patronFour = e;
success =true;
}
else if (patronFive==null)
{
patronFive = e;
success =true;
}
return success;
}
public boolean addPatron(String fname, String lname, double pay, double cash)
{
BankPatron b = new BankPatron(fname, lname,pay,cash);
return this.addPatron(b);
}
public BankPatron getBankPatron(int i)
{
switch(i)
{
case 0: return patronOne;
case 1: return patronTwo;
case 2: return patronThree;
case 3: return patronFour;
case 4: return patronFive;
default: return null;
}
}
public BankPatron getBankPatron(String name)
{
if (patronOne!=null)
{
if (name.equals(patronOne.getName()))
{
return patronOne;
}
else
return null;
}
if (patronTwo!=null)
{
if (name.equals(patronTwo.getName()))
{
return patronTwo;
}
else
return null;
}
if (patronThree!=null)
{
if (name.equals(patronThree.getName()))
{
return patronThree;
}
else
return null;
}
if (patronFour!=null)
{
if (name.equals(patronFour.getName()))
{
return patronFour;
}
else
return null;
}
if (patronFive!=null)
{
if (name.equals(patronFive.getName()))
{
return patronFive;
}
else
return null;
}
else
return null;
}
public boolean removePatron(BankPatron e)
{
boolean success=true;
if (e==patronOne)
{
patronOne=null;
}
else if (e==patronTwo)
{
patronTwo=null;
}
else if (e==patronThree)
{
patronThree=null;
}
else if (e==patronFour)
{
patronFour=null;
}
else if (e==patronFive)
{
patronFive=null;
}
else
{
success=false;
}
return success;
}
public String patronInfo(BankPatron a)
{
String s = a.toString();
return s;
}
}
Код для класса «Покровитель банка»:
public class BankPatron {
private String firstName;
private String lastName;
private double salary;
private double cashOnHand;
private BankAccount accountOne;
private BankAccount accountTwo;
public BankPatron()
{
firstName = "John";
lastName = "Doe";
salary = 50000.00;
cashOnHand = 2300.00;
accountOne = null;
accountTwo=null;
}
public BankPatron(String fname, String lname, double pay, double cash)
{
firstName= fname;
lastName=lname;
salary=pay;
cashOnHand= cash;
accountOne = null;
accountTwo=null;
}
public String getName()
{
return firstName + " " + lastName;
}
public double getSalary()
{
return salary;
}
public double getCashOnHand()
{
return cashOnHand;
}
public void payCheck()
{
double paycheck = salary / 26;
cashOnHand+= paycheck;
}
public BankAccount getBankAccount(int i)
{
if (i !=1 ||i!=2)
{
return null;
}
else if (i == 1)
{
return accountOne;
}
else
return accountTwo;
}
public boolean deposit(int account, double depo)
{
if (account==1 && accountOne != null)
{
if (cashOnHand>=depo)
{
cashOnHand-=depo;
accountOne.deposit(depo);
return true;
}
else
return false;
}
if (account==2 && accountTwo != null)
{
if (cashOnHand>=depo)
{
cashOnHand-=depo;
accountTwo.deposit(depo);
return true;
}
else
return false;
}
else
return false;
}
public boolean withdraw(int account, double wdraw)
{
if (account==1 && accountOne != null)
{
if (accountOne.withdraw(wdraw)== true)
{
cashOnHand+=wdraw;
return true;
}
else
{
return false;
}
}
if (account==2 && accountTwo != null)
{
if (accountTwo.withdraw(wdraw)== true)
{
cashOnHand+=wdraw;
return true;
}
else
{
return false;
}
}
else
return false;
}
public boolean addAccount(double rate, AccountType type)
{
boolean success=true;
if (accountOne==null)
{
accountOne = new BankAccount(firstName, lastName, rate, type);
}
else if (accountTwo==null)
{
accountTwo = new BankAccount(firstName, lastName, rate, type);
}
else
{
success=false;
}
return success;
}
public boolean removeAccount(int i)
{
if (i==1 && accountOne!=null)
{
accountOne=null;
return true;
}
if (i==2 && accountTwo!=null)
{
accountTwo=null;
return true;
}
else
return false;
}
public String toString()
{
String output=this.getName();
if (accountOne != null)
{
output+= accountOne.getType()+ " " + accountOne.getAccountNum() + " Balance: " + accountOne.checkBalance()+" Interest Rate: "+ accountOne.getRate();
}
if (accountTwo != null)
{
output+= " "+ accountTwo.getType()+ " " + accountTwo.getAccountNum() + " Balance: " + accountTwo.checkBalance()+" Interest Rate: "+ accountTwo.getRate();
}
return output;
}
}
Код для BankAccount класса:
public class BankAccount
{
private int accountNumber;
private double balance;
private double interestRate;
private String holderFirstName;
private String holderLastName;
private AccountType type;
private static int nextAccountNum = 1001;
public BankAccount()
{
accountNumber = getNextAccountNum();
balance = 0.0;
interestRate = 0.0;
holderFirstName = "";
holderLastName = "";
type = AccountType.Checking;
}
public BankAccount(String first, String last, double rate, AccountType at)
{
accountNumber = getNextAccountNum();
balance = 0.0;
interestRate = rate;
holderFirstName = first;
holderLastName = last;
type = at;
}
private int getNextAccountNum()
{
return nextAccountNum++;
}
public int getAccountNum()
{
return accountNumber;
}
public double checkBalance()
{
return balance;
}
public void deposit(double amount)
{
balance += amount;
}
public boolean withdraw(double amount)
{
boolean success = true;
if ((balance - amount) >= 0.0) // Only able to withdraw if there is actually enough money.
{
balance -= amount;
}
else
{
success = false;
}
return success;
}
public double getRate()
{
return interestRate;
}
public void setRate(double rate)
{
interestRate = rate;
}
public void applyInterest()
{
balance += (balance * (interestRate / 100));
}
public String getHolderFullName()
{
return holderFirstName + " " + holderLastName;
}
public AccountType getType()
{
return type;
}
}
Заранее спасибо.
@ maharvey67 После того, как вы введете информацию, необходимую для создания покровителя, вы получите вывод «Добро пожаловать в банк». Затем вы вернетесь в главное меню. Если вы попытаетесь добавить учетную запись к этому покровителю, перейдя в меню конкретного покровителя, вас попросят ввести полное имя покровителя, к которому вы пытаетесь получить доступ. Я продолжаю получать вывод, когда введенное имя не связано с покровителем. Кроме того, если я попытаюсь перечислить покровителей, я не получу прямой вывод, когда в список не добавлено покровителей, по какой-то причине я просто не получаю никаких выводов.
В чем проблема? Вы получили какое-либо исключение?
@TiyebM Никаких исключений, нет. Как устроен мой код, это практически невозможно. Вместо этого я просто не могу получить доступ к новым объектам BankPatron, которые я создаю, поскольку моя программа не может найти покровителя с тем именем, которое я только что им назвал. Так что их как будто и не существует
"...это как будто, они не существуют...": возможно, они делать существуют, но меню "специального покровителя" их не находит. Вы отлаживали этот код?
Попробуйте добавить временные операторы печати в области кода, где вы не уверены, что происходит. Например, в getBankPatron(String name) вы можете напечатать значение аргумента name, а затем напечатать имя каждого покровителя, с которым вы сравниваете, чтобы визуально проверить, что он делает.
@KevinAnderson Я просмотрел это, но не нашел в этом ничего плохого. Та же проблема возникает, когда я пытаюсь перечислить посетителей, которые не имеют ничего общего с конкретным меню посетителей.
Ваш код для перечисления покровителей на самом деле никогда ничего не вывод. Вы получаете информацию о покровителе, но никогда не показываете ее!
@KevinAnderson Ты уверен? Я использую метод PatronInfo() для списка посетителей в теле else для параметра списка, не так ли?
Хорошо, вы использовали patronInfo(): как вы думаете, как это могло быть напечатано? patronInfo() сам по себе ничего не печатает, он просто возвращается a String тому, что его вызвало. patronInfo() вызывает метод toString() для Patron, но toString() ничего не печатает, это просто возвращается a String для того, что вызвало Это (в данном случае patronInfo()). Так где же производилась печать?
@KevinAnderson О, теперь я вижу! Что ж, это решает одну из моих проблем, спасибо!




Не совсем уверен, как это может быть полезно кому-то еще, но я понял, почему я не смог получить какие-либо созданные объекты BankAccount. Проблема заключалась в следующем методе и была простой логической ошибкой; У меня было ИЛИ в первом операторе if вместо И. Комментарии Кевина показывают, почему у меня также возникли проблемы с созданием объектов BankPatron.
public BankAccount getBankAccount(int i)
{
if (i !=1 || i!=2)
{
return null;
}
else if (i == 1)
{
return accountOne;
}
else
return accountTwo;
Непонятно в чем проблема. Откуда вы знаете, что они не создаются? Каким образом они выводят то, что у них есть?