2017-05-07 108 views
1

我需要打印出我的ArrayList的內容,但它不能正確打印。更具體地說,getAccountSaldoCustomerRegister中沒有返回正確的值(如果我想打印出例如不同的帳戶)。方法不能正確打印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

可以使用==運營商,這將不檢查的內容相等,而不是它檢查兩個字符串的地址不是比較字符串。 此外,退貨聲明不正確。 我已經爲你的函數一些變化,有一個嘗試:

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

你有任何建議我的代碼(特別是示範類)的改進?詳細說明:任何我不需要在demo類中創建列表並簡單地使用add方法的方法? (我是全新的,只是學習ArrayLists) – purpleman

+0

只有一個建議,你的類仍然有錯誤的字符串比較,只是做正確的,你的應用程序將按需要工作。如果你想玩更多,然後改變你的演示課,從用戶採取一些輸入,然後相應地進行。 –