【问题标题】:Can't populate the ArrayList<> in a different class无法在不同的类中填充 ArrayList<>
【发布时间】:2015-12-23 23:01:37
【问题描述】:

我必须在Librarian 类中填充我的ArrayList&lt;FictionBook&gt;,但是当我使用fictionBooks.add(); 时,它无法识别变量fictionBooks。这是我当前的代码。另外我不确定如何使用add(String, String) 填充它。

public class FictionBook {
    private String author;
    private String title;
    private static final int AVAILABLE = 1;
    private static final int ONLOAN = 0;

    public FictionBook(String theAuthor, String theTitle){
        this.author = theAuthor;
        this.title = theTitle;
    }

    public int borrow() {
        System.out.println("The book is already borrowed.");
        return ONLOAN;
    }

    public int returnB() {
        System.out.println("The book was just returned.");
        return AVAILABLE;
    }

    public String getAuthor() {
        return author;
    }

    public String getTitle() {
        return title;
    }
}

我在这里创建数组列表:

import java.util.*;

public class Library {
    private static final int CAPACITY = 200;
    public ArrayList<FictionBook> fictionBooks = new ArrayList<FictionBook>();

    public Library() {
        //fictionBooks = new ArrayList<FictionBook>();
    }

    public void addBook(FictionBook book) {
        fictionBooks.add(book);
    }

    public void deleteBook(FictionBook book) {
        fictionBooks.remove(book);
    }

    public void borrowBook(FictionBook book) {
    }

    public void returnBook(FictionBook book) {
    }

    public void sort() {
        Collections.sort(fictionBooks, String.CASE_INSENSITIVE_ORDER);
    }
}

我需要在此处填充它,包含 ("Author", "Title"):

public class Librarian {
    public static void main(String[] args) {
        fictionBooks.add("Jon", "Tiltle");
    }
}

【问题讨论】:

  • 你必须通过类的实例来调用它,它不是一个静态列表,所以main方法没有它在它的范围内
  • 家庭作业的味道太浓了……

标签: java arraylist populate


【解决方案1】:

fictionBooks 属于 Library 类。您必须先实例化它。

public class Librarian {
    public static void main(String[] args){
        Library library = new Library();
        library.addBook(new FictionBook("Jon", "Tiltle"));
    }
}

【讨论】:

  • 非常感谢!那行得通。我尝试按作者姓名的字母顺序对书籍进行排序,但没有成功。它给了我错误: Collections 类型中的方法 sort(List, Comparator super T>) 不适用于参数 (ArrayList, Comparator)
  • 请接受答案,谢谢 :-) 至于评论的其余部分,好吧,这是另一个问题,但总之你必须使用Comparator&lt;FictionBook&gt;
【解决方案2】:

您的 fictionBooks ArrayList 属于您的 Library 类。这意味着您首先需要创建Library 的实例:

Library library = new Library();

然后,由于您的 fictionBooks 变量是 FictionBooks 的列表,因此您必须先创建一个,然后才能将其添加到列表中,如下所示:

FictionBook fictionBook = new FictionBook("Jon", "Title");

现在您可以访问新库的 fictionBooks 变量并将新创建的 fictionBook 添加到其中:

library.fictionBooks.add(fictionBook);

但由于您已经在 Library 中找到了一个名为 addBook(FictionBook) 的方法,我建议您使用它,如下所示:

library.addBook(fictionBook);

最后两步可以浓缩为一行,所以完成的代码如下所示:

public class Librarian {
    public static void main(String[] args){
        Library library = new Library();
        //Creating and adding the Fiction Book to the list in a single line of code.
        library.addBook(new FictionBook("Jon", "Title"));
    }
}

这里已经有很多正确答案了,但我只是想我会进一步详细说明,以防它可以帮助您更好地理解问题。 :)

【讨论】:

  • 很高兴为您提供帮助!如果您愿意,您可以通过单击左侧的勾号图标将其作为您问题的答案。但是,如果它更有帮助,请随时接受其他人的答案!当您接受答案时,您将获得一些声望积分,回答者也将获得。
【解决方案3】:

你需要一个Library 的实例:

    public class Librarian {

    public static void main(String[] args){

    Library library = new Library();
    library.fictionBooks.add(new FictionBook("Jon", "Tiltle"));

    }
}

或者使用Library 的方法更好:

    public class Librarian {

    public static void main(String[] args){

    Library library = new Library();
    library.addBook(new FictionBook("Jon", "Tiltle"));

    }

}

【讨论】:

    【解决方案4】:

    您需要公开一个方法,说 getBooks in Library,然后 Librarian 将使用 Library,如下所示:

    public static void main(String[] args){
        Library library = ....;
        library.getFictionBooks().add(new FictionBook("Jon", "Tiltle"));
    }
    

    请注意,您可能应该考虑图书馆,图书馆员之间的关系,并说图书馆有图书馆员,您可以在图书馆内组成图书馆员。

    【讨论】:

      【解决方案5】:

      您可以通过在您的图书管理员类主方法中使用此代码来添加一本书:

          Library library = new Library();
          FictionBook yourBookToAdd =  new FictionBook("Jon", "Tiltle")
          library.addBook(yourBookToAdd );
      

      希望有帮助!

      【讨论】:

      • 他已经在声明的同一行初始化了 Arraylist。他不需要初始化它两次。
      • @Redtama 哦,是的,没错,我刚刚在构造函数中看到了这条线 - 谢谢,我会修复我的答案
      猜你喜欢
      • 2015-08-22
      • 1970-01-01
      • 1970-01-01
      • 2018-05-31
      • 2013-07-04
      • 2021-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多