2014-10-13 2 views
-2

Я абсолютно не знаю, как достичь того, чего я хочу здесь. Поэтому я хочу, чтобы каждый из этих клиентов, который я создал, имел свой список с номерами учетных записей, но я, похоже, не верю, что он работает правильно, поскольку каждый клиент не имеет уникального «списка учетных записей». Любые советы или указатели? Заранее спасибо!Два массива, каждый из которых имеет свой собственный список

Bank.java

List<Customer> customerList = new ArrayList<Customer>(); 
case 1: 
// creates a new customer, adds customer to arraylist 
    System.out.println("Type name:"); 
    String firstname = input.next(); 

    System.out.println("Type surname:"); 
    String surname = input.next(); 

    System.out.println("Type your social security number:"); 
    ssn = input.next(); 

    System.out.println("Input account number: "); 
    String accNo = input.next(); 

    Account account = new Account(accNo); 
    Customer newCustomer = new Customer(firstname, 
    surname, ssn, account); 
    customerList.add(newCustomer); 

Customer.java

public class Customer { 
    public List<Account> accountList; 
    private String firstname, surname, ssn; 
    Account account; 

    public Customer(String firstname, String surname, String ssn, Account account) { 
    this.firstname = firstname; 
    this.surname = surname; 
    this.ssn = ssn; 
    this.account = account; 
    this.accountList = new ArrayList<Account>(); 
} 

// set and get methods here (not relevant I think) 

public void addAccount(Account account) { 
    this.accountList.add(account); 
} 

Account.java

public class Account { 
    private String accountNo; 

    public Account(String accountNo) { 
      this.accountNo = accountNo; 
    } 

    public void setAccountNo(String accountNo) { 
      this.accountNo = accountNo; 
    } 

    public String getAccountNo() { 
      return accountNo; 
    } 
} 
+3

Я не вижу очевидных проблем с этим кодом. Не могли бы вы разместить выходные и ожидаемые результаты, описывающие вашу ошибку? – MrHug

+3

Какое поведение в вашей программе заставляет вас думать, что у каждого клиента нет собственного списка учетных записей? – azurefrog

+2

Кроме того, для чего вам нужны оба списка и учетная запись в клиенте? –

ответ

0

Ваши клиенты уже имеют свой собственный список счетов. Поскольку «accountList» определяется как переменная object-instance, каждый созданный клиент будет иметь свой собственный независимый список учетных записей.

Все ваши клиенты будут делиться этим списком только в том случае, если вы добавите ключевое слово «static» и сделаете его переменной класса (например, независимо от того, сколько клиентов вы создадите там, будет только этот список).

Я однако рекомендую у вас есть два изменения:

1.) Удалите переменный счет от клиента. Поскольку у вас есть список, содержащий все эти учетные записи, я не вижу никакого смысла в том, что у вас есть одна учетная запись, прикрепленная к этому клиенту (если это не какая-то главная учетная запись или подобная, но в этом случае она будет отличаться от тех, которые указаны в списке, его тип).

2.) по-прежнему быть в состоянии обрабатывать счета из вашего идентификатора клиента изменить конструктор так:

public Customer(String firstname, String surname, String ssn, Account account) { 
this.firstname = firstname; 
this.surname = surname; 
this.ssn = ssn; 
this.accountList = new ArrayList<Account>(); 

//directly add the first account to the list of accounts 
if(account != null){ 
    accountList.add(account); 
} 

3.) (необязательно) Над Конструктора не удовлетворяет. Если у кого-то был бы объект Account-Object готовым, когда дело доходит до создания вашего Клиента, есть также высокая вероятность, что указанный вызывающий абонент (в конце концов это вы;)) имеет целую кучу учетных записей, чтобы добавить к этому клиенту, поэтому изменение идентификатора мой конструктор так:

public Customer(String firstname, String surname, String ssn, List<Account> accounts) { 
    this.firstname = firstname; 
    this.surname = surname; 
    this.ssn = ssn; 
    this.accountList = new ArrayList<Account>(); 

    //directly add the first account 
    if(accounts != null){ 
     this.accountList = accounts; 
    } 
} 

Если абонент имеет список счетов для этого клиента, он может напрямую доставить весь список по созданию объектов. Если, с другой стороны, у него еще нет готовых счетов, он просто доставит нуль, и у вас будет пустой список.

Существует также возможность «списков параметров» (переменные аргументы), позволяющих подойти с 0-п аргументов определенного типа, если вы не любите выше «нулевой», если нет учетных записей не будут готовы:

public Customer(String firstname, String surname, String ssn, 
     Account... accounts) { 
    this.firstname = firstname; 
    this.surname = surname; 
    this.ssn = ssn; 
    this.accountList = new ArrayList<Account>(); 

    // If any accounts delivered, add them to the list 
    for (Account tempAccount : accounts) { 
     if (tempAccount != null) { 
      accountList.add(tempAccount); 
     } 
    } 
} 

В этом примере вы можете использовать его как это:

public static void main(String[] args){ 


    // Case "I dont have a Account yet, just make me a Customer! 
    Customer myCustomer = new Customer("Foo", "Bar", "bla"); 

    // Case "I already have a Account, letme directly add that to the Customer that i want to create now" 
    Account a = new Account(); 
    Customer myCustomer2 = new Customer("Foo", "Bar", "bla", a); 

    // Case "I already have a list of Accounts, letme directly add that to ..." 
    Account b = new Account(); 
    Account c = new Account(); 
    List<Account> accounts = new ArrayList<Account>(); 
    accounts.add(b); 
    accounts.add(c); 

    Customer myCustomer3 = new Customer("Foo", "Bar", "bla", accounts.toArray(new Account[0])); 
} 

к сожалению я начал писать о, прежде чем я списках параметров заметил, вам нужен массив объектов, а не список. Вот почему у нас есть «toArray» -Method в качестве временного решения, которое делает наш список учетных записей массивом учетных записей. Но не стесняйтесь просто игнорировать часть о varargs, если она не ясна и пойти для конструктора, берущего список учетных записей (или null).

Я предполагаю, что вы изучаете Java, и если так: Youre делает хорошо до сих пор. Не путайте всю информацию и продолжайте.Я рекомендую вам прочитать об объектных-экземплярах-переменных и переменных класса, чтобы выяснить, какие объекты разделяют, а что нет. «Лучше» дизайн придет с годами, не беспокоиться о таких «проблемах дизайна» прямо сейчас и играть с ними, так как они научат вас «трудному пути».