Проблема реализации создания объекта в Java - PullRequest
0 голосов
/ 07 марта 2019

Проект, над которым я работаю, представляет собой интерфейс банка с единственным объектом PatronList, который сам содержит BankPatron объекты, содержащие BankAccount объекты. Проблема, с которой я сталкиваюсь, заключается в том, что я не могу создать новые объекты. Основной метод использует только один PatronList объект, но любые BankPatron или BankAccount объекты, которые я пытаюсь создать, не являются, но все равно выводят, что они имеют по какой-то причине. В моей программе все объекты уже предварительно созданы и установлены равными нулю. В этом много кода, и я не уверен, что может понадобиться, поэтому извините, если я выложу здесь слишком много.

Итак, интерфейсное меню начинается с этого:

  • Список постоянных посетителей
  • Добавить нового патрона
  • Удалить Патрона
  • Патрон конкретные вопросы
  • Выход

    Если вы выберете «d», вы попадете во второе меню, которое выглядит следующим образом:

  • Добавить новую учетную запись
  • Закрыть счет
  • Платят
  • Применение процентов к счетам
  • Сделать депозит
  • Сделать вывод
  • Вернуться в главное меню

Чтобы добавить список постоянных посетителей, используйте следующий код в основном методе:

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

Заранее спасибо.

1 Ответ

0 голосов
/ 07 марта 2019

Не слишком уверен, как это может быть полезно для кого-то еще, но я понял, почему я не смог получить какие-либо созданные объекты BankAccount.Проблема заключалась в методе ниже и была простой логической ошибкой;У меня было OR в первом операторе if вместо AND.Комментарии Кевина показывают, почему у меня возникли проблемы с созданием объектов BankPatron.

public BankAccount getBankAccount(int i)
	{
		if(i !=1 || i!=2)
		{
			return null;
			
		}
		else if(i == 1)
		{
			return accountOne;
		}
		else
		return accountTwo;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...