2017-05-07 10 views
1

ArrayListの内容を印刷する必要がありますが、正しく印刷されません。具体的にはCustomerRegistergetAccountSaldoが正しい値を返さない(私が別のアカウントなどを印刷したい場合)。ここでArrayListの内容が正しく印刷されないメソッド

は私のコードです:

クラスアカウント

public class Account { 

private Customer customer; 
private String nbr; 
private double saldo; 

public void setNbr(String nbr){ 
    this.nbr = nbr; 
} 

public String getNbr(){ 
    return nbr; 
} 

public void setSaldo(double saldo){ 
    this.saldo = saldo; 
} 

public double getSaldo(){ 
    return saldo; 
} 

public void setCustomer(Customer customer){ 
    this.customer = customer; 
} 

public Customer getCustomer(){ 
    return customer; 
} 

public void withdraw(double amount){ 
    saldo -= amount; 
} 

public void deposit(double amount){ 
    saldo += amount; 
} 



} 

クラスの顧客

public class Customer { 

private String nbr; 
private String namn; 

private ArrayList<Account> accounts = new ArrayList<Account>(); 

public void setNbr(String nbr){ 
    this.nbr = nbr; 
} 

public String getNbr(){ 
    return nbr; 
} 

public void setNamn(String namn){ 
    this.namn = namn; 
} 

public String getNamn(){ 
    return namn; 
} 

public void setAccounts(ArrayList<Account> accounts){ 
    this.accounts = accounts; 
} 

public ArrayList<Account> getAccounts(){ 
    return accounts; 
} 

public void add(Account account){ 
    accounts.add(account); 
} 

public Account find(String nbr){ 
    for(Account a : accounts){ 
     if(nbr == a.getNbr()){ 
      return a; 
     } 
    } 
    return null; 
} 

} 

クラスCustomerRegister

public class CustomerRegister { 

private ArrayList<Customer> customers = new ArrayList<Customer>(); 

public void setCustomers(ArrayList<Customer> customers){ 
    this.customers = customers; 
} 

public ArrayList<Customer> getCustomers(){ 
    return customers; 
} 

public void add(Customer k){ 
    customers.add(k); 
} 

public Customer find(String nr){ 
    for (Customer b : customers){ 
     if (nr == b.getNbr()){ 
      return b; 
     } 
    } 
    return null; 
} 

public ArrayList<Account> printAccounts(String customerNbr){ 
    Customer l = find(customerNbr); 
    if (l != null){ 
     return l.getAccounts(); 
    } 
    return null; 
} 

// CAN'T SOLVE THIS 
public Double getAccountSaldo(String customerNbr, String accountNbr) { 
    double balance = 0; 
    Customer custNbr = find(customerNbr); 
    // Shouldn't it be "Account acctNbr = find(accountNbr);" here? 
    // Problem is I can't access that method in this class... 

    if(custNbr != null){ 
    for (Account x : printAccounts(customerNbr)) { 
     if (accountNbr == x.getNbr()) { 
      balance += x.getSaldo(); 
     } 
     return balance; 
    } 
    } 
    return null; 
} 

} 

クラスのデモ:

public class Demo { 
    public static void main(String[] args){ 

    CustomerRegister r1 = new CustomerRegister(); 
    ArrayList<Account> listOfAccounts = new ArrayList<Account>(); 
    ArrayList<Customer> listOfCustomers = new ArrayList<Customer>(); 

    Customer c = new Customer(); 
    c.setNbr("1"); 
    c.setNamn("Adam Schinn"); 

    Account a = new Account(); 
    a.setNbr("Konto 1"); 
    a.setSaldo(2200); 
    a.setCustomer(c); 

    Account b = new Account(); 
    b.setNbr("Konto 2"); 
    b.setSaldo(2000); 
    b.setCustomer(c); 

    listOfCustomers.add(c); 
    listOfAccounts.add(a); 
    listOfAccounts.add(b); 

    c.setAccounts(listOfAccounts); 
    r1.add(c); 

    r1.setCustomers(listOfCustomers); 

    for(Account temp : r1.printAccounts("1")){ 
     System.out.println(temp.getNbr() + " Balance: " + temp.getSaldo() + "kr "); 
    } 

    for(Customer temp : r1.getCustomers()){ 
     System.out.println("Nr: " + temp.getNbr() + " Namn: " + temp.getNamn()); 
    } 

    // CAN'T SOLVE THIS 
    // If I write "Konto 2" instead of "Konto 1" it prints "0.0" 
    System.out.println(r1.getAccountSaldo("1", "Konto 1")); 


} 
} 

印刷が出て

Konto 1 Balance: 2200.0kr 
Konto 2 Balance: 2000.0kr 
Nr: 1 Namn: Adam Schinn 
2200.0 

答えて

0

あなたは代わりに、それは二つの文字列のアドレスを確認し、これはコンテンツの平等をチェックしません==演算子を使用して文字列を比較することはできません。 returnステートメントも正しい位置にありませんでした。私は、あなたの関数にいくつかの変更を を行ったもので試してみる:

public Double getAccountSaldo(String customerNbr, String accountNbr) { 
    double balance = 0; 
    Customer custNbr = find(customerNbr); 
    // Shouldn't it be "Account acctNbr = find(accountNbr);" here? 
    // Problem is I can't access that method in this class... 

    if(custNbr != null){ 
    for (Account x : printAccounts(customerNbr)) { 
     if (accountNbr.equals(x.getNbr())) { 
      balance += x.getSaldo(); 

     }   
    } 
    } 
    return balance; 
} 
+0

をあなたは私のコードのための任意の提案の改善を持っている(特にデモクラス)ですか?具体的には:どのように私はデモクラスでリストを作成し、単純にaddメソッドを使用する必要はありませんか? (私は完全なnewbであり、ArrayListsを学んでいるだけです) – purpleman

+0

あなたのクラスではまだ文字列の比較が間違っていますが、正しいことをしてください。アプリケーションは必要に応じて動作します。もっとプレイしたい場合は、デモクラスを変更してユーザーからの入力を受け取り、それに応じて進んでください。 –

関連する問題