2013-04-03 189 views
0

我试图将对象添加到我的ArrayList的朋友......我得到这个错误,为什么我添加对象时ArrayList中我得到这个错误 - Java的

Add方法(INT,人)的ArrayList类型不 适用于参数(INT,字符串)

我试图加我的人对象的少数情况下,最终创建的朋友一棵树。

import java.util.*; 

public class Person 
{ 
    public int  id;  // some identification number unique to the person 
    public boolean zombie; // true if the person is a zombie 
    public char state; // p means human, z means zombie 

    public static ArrayList<Person> friends; // list of friends 

    public Person(int id, char state) 
    { 
     this.id = id; 
     this.state = state; 
     //this.zombie = zombie; 
    } 

    public static void addPeople() 
    { 
     friends = new ArrayList<Person>(); 
     friends.add(1, 'p'); 
    } 

    public boolean isZombie() 
    { 
     if (state == 'p') 
     { 
      return zombie=false; 
     } 
     else if (state == 'z') 
     { 
      return zombie=true; 
     } 

     return zombie; 
    } 
} 

错误位于“添加”字下。我也想知道如何命名对象的实例,所以我只调用名称而不是两个属性。

在此先感谢您的帮助。

+0

每次都不会重新初始化“好友”,您会删除旧条目。 – Mordechai 2013-04-03 22:44:54

回答

3
import java.util.ArrayList; 
import java.util.List; 

/** 
* Person description here 
* @author Michael 
* @link http://stackoverflow.com/questions/15799429/why-am-i-getting-this-error-when-adding-object-to-arraylist-java/15799474?noredirect=1#comment22468741_15799474 
* @since 4/3/13 9:45 PM 
*/ 
public class Person { 
    private Integer id; 
    private boolean zombie; 
    private List<Person> friends; 

    public static void main(String [] args) { 
     List<Person> lastPeopleStanding = new ArrayList<Person>(); 
     for (int i = 0; i < 3; ++i) { 
      lastPeopleStanding.add(new Person(i)); 
     } 
     lastPeopleStanding.get(0).addFriend(lastPeopleStanding.get(1)); 
     lastPeopleStanding.get(0).addFriend(lastPeopleStanding.get(2)); 
     System.out.println(lastPeopleStanding); 
    } 

    public Person(Integer id) { 
     this.id = id; 
     this.zombie = false; 
     this.friends = new ArrayList<Person>(); 
    } 

    public boolean isZombie() { return this.zombie; } 

    // Irreversible! Once you go zombie, you don't go back 
    public void turnToZombie() { this.zombie = true; } 

    // Only add a friend if they're not a zombie 
    public void addFriend(Person p) { 
     if (p != null && !p.isZombie()) { 
      this.friends.add(p); 
     } 
    } 

    @Override 
    public String toString() { 
     final StringBuilder sb = new StringBuilder("Person{"); 
     sb.append("id=").append(id); 
     sb.append(", zombie=").append(zombie); 
     sb.append(", friends=").append(friends); 
     sb.append('}'); 
     return sb.toString(); 
    } 
} 
+0

我正在学习Java。感谢您的帮助 – choloboy7 2013-04-03 22:42:58

+0

我最终想制作一个朋友之树,其中Person P是根,P可以有两个朋友,一个是僵尸,一个是人,树的生长方式与第一组朋友。僵尸会有两个朋友一个僵尸一个人和一个朋友一起。非常感谢这篇文章,真的很有帮助! – choloboy7 2013-04-03 22:51:26

+1

+1使朋友成为实例变量而不是静态的,也许你应该使用Set或者检查这个人是否已经添加为朋友。你有什么理由使用Integer而不是int吗?并且请使用更多的主持语言'编写的代码毫无价值'我们都是以初学者开始的。 – 2013-04-03 22:51:47

1

你忘了创建一个新的Person添加到您的ArrayList

从您的意见,您可以创建一个名为idCount和增量类成员变量时Person增加:

public void addPeople() { 
    friends.add(new Person(++idCount, 'p')); 
} 

使用static方法通常被认为是可以有状态的类的糟糕设计。

+0

有没有办法让每个实例都有唯一的名字? – choloboy7 2013-04-03 22:38:26

+0

是的,但你将不得不管理唯一的ID,比如说增加ID数 – Reimeus 2013-04-03 22:39:13

相关问题