2013-10-22 124 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));