Java:如何计算 arraylist 中出现的次数,然后让它在 toString 中打印该输出?

Java: How to count occurrences in an arraylist, then get it to print that output in a toString?

所以我正在做一个图书馆图书模拟,我目前卡住的部分是试图找到借出的图书数量,然后在调用 toString 方法时将其打印出来。

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

这本书的状态是枚举类型

public enum Status {LOAN, REFERENCE, AVAILABLE};

我卡住的代码:

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

numberOfBooksOnLoantoString 方法都在 Biblio class

当我使用 toString 方法时,值 0 被打印,即使是在借书时,与 getLoanCount 方法(也在这个 class 中)形成对比将打印所需的值。

我的问题是,我怎样才能通过一个数组列表并计算所有借出的书籍,然后将这个值存储在一个变量中以便我可以在 toString 中使用它? 或者更一般地说,你如何遍历数组列表并计算所有具有共同特定变量的对象?

如果这是问题的一部分,我会收到关于

的警告 'local variable hides a field'

int loanCount = 0;

你有一个也叫loanCount的实例变量吗?如果答案是肯定的,请尝试删除实例一并更改 toString 以调用方法:

@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();
}
public int numberOfBooksOnLoan(){
 int loanCount= 0;
 for(Book onLoan: collection){
    if(onLoan.getBookStatus()== Status.LOAN){
        loanCount++;    
    }
 }
 return loanCount;
}

您正在 numberOfBooksOnLoan() 中创建局部变量,但在您的 toString() 方法中您使用的是 class 属性 loanCount

只需从 numberOfBooksOnLoan() 中的 int loanCount= 0; 中删除 int,这样您就可以使用 class 属性而不是局部变量。