2013-10-22 114 views
2

我是新來編寫Java代碼,他會喜歡一些幫助。我想在我的主要我有例如的Java添加對象的ArrayList錯誤

public static void main(String[] args) { 

    Fish f1 = new Fish("Nemo");} 

,並在我的課和構造方法的類魚的對象添加到一個ArrayList呼叫fishList

public class Fish { 
protected static String name; 
protected static int number; 
protected static List<Fish> fistList = new ArrayList<Fish>(); 


public Fish(String in){ 
name = in; 
number = 15; 
fishList.add(name, number); 
} 

但我得到一個錯誤「找到的附加沒有合適的方法(字符串,整數) 方法List.add(INT,魚)是不適用 (實際參數字符串不能被轉換通過方法調用轉換爲int) 實現方法具d List.add(Fish)不適用 (實際的正式參數列表長度不同)

如何正確添加對象到arraylist?

回答

2

的所有namenumber首先不應該是static(除非你想所有的魚具有相同的名稱/編號,但隨後創建該類的超過1個實例將是資源的浪費)!

其次,變化:

fishList.add(name, number); 

要:

fishList.add(this); 

fishList可以堅持類型的魚對象的引用。如果您嘗試添加「名稱,數字」Java不知道您的意思是魚:-)

this指向當前正在構造函數中創建的對象。

+0

非常感謝你幫助我使用靜態的東西,如果我誠實地說我得到一個錯誤,並認爲這可能有所幫助,我已經發布了一個關於它的新問題!給你發現靜態東西的勾號。 –

3

您需要更改fishList.add(name, number);fishList.add(this);

不要創建static修飾符對象財產,除非必要的。 static修飾符意味着屬性屬於類。如果魚的修改這些屬性的對象中的任何一個將得到改變,以最後一次修改的值。

protected static String name; 
protected static int number; 

請修改ypur pojo這樣的內容。

class Fish { 

    private String name; 
    private int number; 

    public Fish(String name, int number) { 
     super(); 
     this.name = name; 
     this.number = number; 
    } 

    @Override 
    public String toString() { 
     return "Fish [name=" + name + ", number=" + number + "]"; 
    } 

} 

public static void main(String[] args) { 

    List<Fish> fistList = new ArrayList<Fish>(); 
    fistList.add(new Fish("name1",1)); 
    fistList.add(new Fish("name1",2)); 
    fistList.add(new Fish("name1",3)); 
    fistList.add(new Fish("name1",4)); 
    fistList.add(new Fish("name1",5)); 
    fistList.add(new Fish("name1",6)); 
    for (Fish fish : fistList) { 
     System.out.println(fish); 
    } 

    System.out.println(fistList.get(0)); // getting the first Fish 
    System.out.println(fistList.get(1)); // getting the second Fish 

} 
+0

感謝您的幫助的朋友! –

+0

@SerDavos樂意提供幫助。歡迎您... – Prabhakaran

+0

@SerDavos您需要添加17魚fishList。那麼只有你可以通過索引16訪問16個元素。fishList.get(16);注意:列表是基於0的索引。 – Prabhakaran

1

你定義的ArrayList的參數是接受魚類對象,配售對象不是一個魚在那裏會導致錯誤。此外,由於其他的答案也提到,您使用的是ArrayList.add方法的錯誤形式。

fishList.add(name, number); 

應該是,

fishList.add(this); 
0

你不能將兩個參數添加列表的方法。

通過這個像下面

fishList.add(this); 

也在名單

0

給定的名稱和編號是字符串格式,但你在泛型指定魚類的聲明fistListfishList正確錯字的錯誤, 所以你必須在你的名單只添加魚對象,如

fishList.add(本) ;

0

因爲您使用泛型並聲明瞭fishList與。所以你只允許 添加類型Fish的列表項。沒有其他類型是允許的。這是泛型提供的編譯時類型安全性。 List的add()被重載如下。 add(T)和add(int,T)其中第一個參數是索引,第二個參數是任何類型。但是你說 add(String,int)在java.util.List中不存在。

靜態字段永遠不會被記錄下來,除非它們是必需的,因爲它們對性能有很大的影響。所以在屬性聲明中刪除靜態。

如果屬性'數字'可能採取不同的值,那麼不要在其構造函數中分配默認值15,而應該這樣做。

private String name; 
private int number; 

public Fish(String name,int number){ 
this.name = name; 
this.number = number; 
} 

代替上述聲明firstList.add(name,number);

firstList.add(new Fish("abc",10));