2014-01-15 115 views
1

我試圖通過調用另一個類的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)); 
    } 


} 

}

        `                                   
+0

你的'printLibrary'方法是如何聲明的?它接受任何論據嗎?另外,它爲什麼是「靜態」? –

+0

您的printLibrary方法有一個ArrayList類型的參數。但是在你的動作監聽器中,你可以不帶任何參數地調用它。你能解釋爲什麼嗎? – dinukadev

回答

2

看看您的來電:

library.printLibrary(); 

現在看看聲明:

public static void printLibrary(ArrayList<LibraryItem>items) 

這是一個靜態方法,WI一個參數是一個列表。您試圖將其稱爲實例方法(即使在調用靜態方法時,Java仍然允許(但不管怎樣應該避免這種方法)但不提供任何參數。

鑑於Library已有的項目清單,我建議你只需要改變的聲明,使之成爲無參數實例方法:

public void printLibrary() 

...留法的身體一樣,這會然後拿起實例變量items

+0

感謝您的幫助,似乎擺脫了我的錯誤!但是當點擊通過我的界面添加一個元素到我的數組列表時,我的數組列表的元素仍然沒有顯示。我收到這些消息。異常的線程 「AWT-EventQueue的-0」 顯示java.lang.NullPointerException \t在LibraryFrame.actionPerformed(LibraryFrame.java:62) \t在javax.swing.AbstractButton.fireActionPerformed(來源不明) – user3198936

+0

@ user3198936:現在你」已經包括了消息......這是第62行嗎?你在哪裏聲明'library',你如何初始化它? –

+0

public class LibraryItem { \t private String name; \t private int year,quantity; \t LibraryItem(字符串nameIn,整數yearIn,整數quantityIn) \t { \t \t名稱= nameIn; \t \t year = yearIn; \t \t quantity = quantityIn; \t \t} \t公共布爾租金() \t { \t \t如果(量> 0) \t \t \t {\t \t \t \t quantity--; \t \t \t} return true; } \t public String toString() { \t return name +「」+「has」+「」+ quantity +「books on loan」; \t} public String getName() { \t return name; } 公衆詮釋getQuantity(){ \t \t迴流量;} 公衆詮釋了getYear(){ 迴歸年; } } – user3198936

0

你已經聲明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); 

但是,如果您所做的只是打印出一個inf,您應該更改該方法的聲明方式來自班級的私人數據成員的信息。一個更好的聲明是:

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

現在,圖書館的printLibrary()方法會在你items數據成員打印每個項目。如果您將聲明更改爲此,您可以將呼叫保留爲library.printLibrary()