2016-04-07 16 views
0

Bir kütüphane kitap simülasyonu yapıyorum, takılı olduğum bölüm, kredi kartı kitaplarını bulmaya çalışıyor ve bunun için toString yöntemi çağrıldığında basılacak.Java: Arraylist'teki olaylar nasıl sayılır, sonra bu çıktıyı toString'e yazdırılır?

public class Biblio{ 
    private ArrayList<Book> collection; 
    private int loanCount; 

Kitabın durumunun ben şaşırıp tip enum

public enum Status {LOAN, REFERENCE, AVAILABLE}; 

kodu taşımaktadır:

public int numberOfBooksOnLoan(){ 
    int loanCount= 0; 
    for(Book onLoan: collection){ 
     if(onLoan.getBookStatus()== Status.LOAN){ 
      loanCount++;  
     } 
    } 
    return loanCount; 
} 


     @Override 
public String toString(){ 
    StringBuilder string= new StringBuilder(); 
    string.append("total number of books: ").append(bookCollection.size()).append("\n"); 
    string.append("number of loaned books: ").append(loanCount).append("\n"); 
    return string.toString(); 
} 

hem numberOfBooksOnLoan ve toString yöntemleri Biblio sınıfta

toString'u kullanırken kullandığım hod, 0 rakamı, kitaplar, kredi olduğunda bile, gerekli değeri basacak olan getLoanCount yönteminin (ayrıca bu sınıfta) aksine yazdırılır.

Sorum şu: Bir arraylistten nasıl geçebilirim ve borçlu olan tüm kitapları sayıyorum, o zaman bu değer bir değişkende saklanır, böylece toString'de kullanabilirim? Veya daha genel olarak, bir arraylist'ten nasıl geçiyorsunuz ve ortak bir değişkenle tüm nesneleri nasıl sayıyorsunuz?

durumda bu sorunun bir parçası, bir uyarım var bir örnek değişken da loanCount çağrıda mı

int loanCount = 0;

+0

Yerel değişkeni kaldırın ve kontrol edin? –

cevap

1

istinaden 'Yerel değişken bir alan gizler' var? Cevap evet yöntemi çağırmak için örnek bir ve değişim toString kaldırmayı deneyin değilse:

@Override 
public String toString(){ 
    StringBuilder string= new StringBuilder(); 
    string.append("total number of books: ").append(bookCollection.size()).append("\n"); 
    string.append("number of loaned books: ").append(numberOfBooksOnLoan()).append("\n"); 
    return string.toString(); 
} 
+0

Bu çalışır. Yardım için teşekkürler! – Maitiu

-1
public int numberOfBooksOnLoan(){ 
int loanCount= 0; 
for(Book onLoan: collection){ 
    if(onLoan.getBookStatus()== Status.LOAN){ 
     loanCount++;  
    } 
} 
return loanCount; 
} 

Sen numberOfBooksOnLoan() yerel bir değişken oluşturan ancak sizin toString() yönteminde senin class özelliği loanCount kullanıyor.

numberOfBooksOnLoan()int loanCount= 0;'dan int kaldırmanız için yerel değişken yerine sınıf özniteliğini kullanacaksınız.

+1

Bu harika bir fikir değildir çünkü değer hesaplanır, ancak bir örnek alanında depolanır. 'ToString()' 'numberOfBooksOnLoan()' den önce çağrılırsa ya da alttaki koleksiyon değiştirildikten sonra fakat 'numberOfBooksOnLoad() 'çağrılmadan önce ne olur? Hesaplama yöntemini doğrudan 'toString() '(veya ihtiyaç duyulan herhangi bir yer)' den çağırmak daha iyidir. –

+0

oh evet sağınız, bunu kaçırdı – Dimi

İlgili konular