2013-04-03 55 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