0

オブジェクトを ArrayList フレンドに追加しようとしています... このエラーが発生します。

ArrayList 型のメソッド add(int, Person) は、引数 (int, String) には適用されません。

個人オブジェクトのインスタンスをいくつか追加して、最終的に友達のツリーを作成しようとしています。

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;  
    }
}

エラーは「add」という単語の下にあります。また、オブジェクトのインスタンスに名前を付ける方法を知りたいので、2 つの属性ではなく名前のみを呼び出します。

すべての助けを前もって感謝します。

4

2 に答える 2

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();
    }
}
于 2013-04-03T22:37:17.093 に答える
1

Personに追加する新しい を作成するのを忘れましたArrayList:

あなたのコメントから、 aが追加されidCountたときに呼び出され、インクリメントされるクラスメンバー変数を作成できます。Person

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

メソッドを使用staticすることは、一般に、状態を持つことができるクラスの設計が不十分であると見なされます。

于 2013-04-03T22:37:53.150 に答える