3

現在プログラムを書いていますが、問題が見つかりました。問題は、以下のこのループでは、PersonクラスのすべてのインスタンスがItemの1つのインスタンスにアタッチされていることです。私が欲しいのは、人がそれぞれ自分のアイテムを持っているということです。何か提案はありますか?

クラスシミュレーション:

public void simulate(int days){

    for(int i=0;i<days;i++) {

        int persons = 10;

        for(int j=0;j<persons;j++){

            Person person = new Person();

            Item item = new Item();

            person.setItem(item);
        }
     }
 }

クラスの人:

private Item item;

public void setItem(Item item)
{
        this.item = item;
}
4

5 に答える 5

3

get私はあなたがすべきだと思うset

すべてのPersonオブジェクトが同じオブジェクトを使用するには、フィールドを作成する必要がありますstatic。そうしないでくださいstatic。このフィールドからキーワードを削除してください。定数でない限り、フィールドを静的にしないことをお勧めします(可能な場合)

于 2012-12-18T17:04:11.517 に答える
2

あなたのコードはあらゆる種類の間違いであり、コンパイルされないと確信しています。

コンストラクターに渡されるオブジェクト型のパラメーターを使用してPersonオブジェクトを作成する場合は、次のことを行う必要があります。

Object someKindOfObject = new Object(); //should really be a specific type...
Person person = new Person(sometKindOfObject);

getSomethingメソッドは、オブジェクトの状態を変更してはならず、オブジェクトに関する情報を返すだけです。コンストラクターオプションを使用しない場合は、setObjectメソッドを作成します。

于 2012-12-18T17:04:42.400 に答える
2

私が欲しいのは、人がそれぞれ自分のアイテムを持っているということです。

しかし、それはまさにあなたがしていることです。のインスタンスを作成していPersonて、新しく作成された各インスタンスは、の新しく作成されたインスタンスを受け取ります。Item

for(int j=0;j<persons;j++){
  Person person = new Person();
  Item item = new Item();
  person.setItem(item);
}

作成されたすべてのオブジェクトへの参照を保持しないということだけです。したがって、遅かれ早かれガベージコレクションされます。あなたのループはと同等です

for(int j=0;j<persons;j++){
  new Person().setItem(new Item());
}
于 2012-12-18T17:19:35.197 に答える
1

人物オブジェクトを保存する場所?新しい参照で人物オブジェクトを上書きするたびに、ループから抜け出すと、単一のオブジェクト参照が作成されます。これが、私が推測する修正されたコードです;- )。

public void simulate(int days){

    for(int i=0;i<days;i++) {

        int persons = 10;

        Person[] personArray = new Person[persons];

        for(int j=0;j<persons;j++){

            personArray[j] = new Person();

            Object object = new Object();

            personArray[j].setObject(object);
        }

//here you have the reference to all person objects in array
     }
 }

クラス人

public void setObject(Object object)
{
        this.object = object;
}
于 2012-12-18T17:12:19.473 に答える
-1

これで、コードが機能しているように見えるか、問題が明らかではありません。OPは、受け取ったエラーに関する詳細を提示する必要があります。

最初の投稿のエラーはここにありました:

public void getObject(Object Object)
{
        this.object = object;
}

objectの代わりに正式なパラメータに名前を付ける必要がありますObject

public void getObject(Object object)

それ以外の

public void getObject(Object Object)

Javaでは大文字と小文字が区別されます。

Lineは、フィールドをそれ自体にthis.object = object;割り当てているため、コードでは何もしません。object個別の変数Objectは何の役割も果たしません。そして、あなたはそれについて警告を受けるべきです。

また、methodに名前を付ける方がよいでしょうsetObject

于 2012-12-18T17:04:25.120 に答える