有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java显示arraylist的元素

我试图通过从另一个类调用printlibrary方法,在动作侦听器方法中显示我的ArrayList<LibraryItem>元素。我不断得到:

The method printLibrary(ArrayList<LibraryItem>) in the type Library is not applicable for the arguments.

我不明白我做错了什么,你能帮帮我吗

import java.util.ArrayList;

public class Library {

    private ArrayList<LibraryItem> items;

    public Library() {
        items = new ArrayList<LibraryItem>();
    }

    public void addItem(LibraryItem newItem) {
        items.add(newItem);
    }

    public LibraryItem searchForItem (String name) {
        for(LibraryItem searchForItem: items) {
            if(searchForItem.getName().equals(name))
                return searchForItem;
        }
        return null;
    }

    public static void printLibrary(ArrayList<LibraryItem> items) {
        for(int i = 0; i < items.size(); i++) {
            System.out.println(items.get(i));
        }
    }
}

public void actionPerformed(ActionEvent ev) {
    String t = title.getText();     
    int y = Integer.parseInt(year.getText());
    int q = Integer.parseInt(quantity.getText());

    library.addItem(new LibraryItem(t,y,q)); 

    library.printLibrary(); -------->>>> ERROR HERE!!!
}                                                                                                     this is the edited version and the error                                               public void printLibrary(ArrayList<LibraryItem> items) {
        for(int i = 0; i < items.size(); i++) {
            System.out.println(items.get(i));
        }
    }
}      public void actionPerformed(ActionEvent ev) {
    String t = title.getText();     
    int y = Integer.parseInt(year.getText());
    int q = Integer.parseInt(quantity.getText());

    library.addItem(new LibraryItem(t,y,q)); 

    library.printLibrary(); 
}                                                                                              this is my code for libraryitem class `                                                                public class LibraryItem 

{

    private String name;
    private int year, quantity;

   LibraryItem(String nameIn, int yearIn, int quantityIn)
   {
       name = nameIn;
       year = yearIn;
       quantity = quantityIn;



   }



public boolean rent()
{


    if(quantity > 0) 

    {
         quantity--;

    }
      return true;
}






    public String toString()
   {
return name + " " +"has"+ " " +quantity+ "books on loan";


   }

    public String getName()
   {
return name;

   }


   public int getQuantity()
   {

   return quantity;
   }

   public int getYear()
   {

   return year;
   }


   }

`

这是我的库“导入java”的代码。util。ArrayList

 public class Library {

private ArrayList<LibraryItem> items;




public Library()
{
    items = new ArrayList<LibraryItem>();
}



public void addItem(LibraryItem newItem)
{
    items.add(newItem);

}

public LibraryItem searchForItem (String name)

{
    for(LibraryItem searchForItem: items)
    {
        if(searchForItem.getName().equals(name) )

    return searchForItem;


}
    return null;
}

public void printLibrary()
{


    for(int i = 0; i< items.size(); i++)
    {

        System.out.println(items.get(i));
    }


}

}

                                   `                                                                                                                                           

共 (2) 个答案

  1. # 1 楼答案

    看看你的电话:

    library.printLibrary();
    

    现在看看宣言:

    public static void printLibrary(ArrayList<LibraryItem>items)
    

    这是一种静态方法,其参数为列表。您试图将其作为实例方法调用(不幸的是,Java即使在调用静态方法时也允许这样做,但无论如何都应该避免这样做),但不提供任何参数

    鉴于Library已经有一个项目列表,我建议您只需更改声明,使其成为无参数实例方法:

    public void printLibrary()
    

    。。。方法的主体保持不变,然后将拾取实例变量items

  2. # 2 楼答案

    您已经声明了printLibrary(ArrayList<LibraryItem> items),但是调用它时没有传入任何参数

    宣言:

    public static void printLibrary(ArrayList<LibraryItem>items)
    {
        for(int i = 0; i< items.size(); i++)
        {
            System.out.println(items.get(i));
        }
    }
    

    以及对它的呼吁:

    library.printLibrary();
    

    对printLibrary()方法的调用需要一个ArrayList,因此您可以像这样调用它:

    library.printLibrary(items);
    

    但是,如果您所做的只是从类的私有数据成员打印信息,则应该更改方法的声明方式。更好的声明是:

    public void printLibrary()
    {
        for(int i = 0; i< items.size(); i++)
        {
            System.out.println(items.get(i));
        }
    }
    

    现在,库的printLibrary()方法将打印items数据成员中的每个项。如果将声明更改为此,则可以将调用保留为library.printLibrary()