3

I am currently writing a program but I found a problem. The problem is that in this loop below all instances of the class Person are attached to one instance of Item. What I want is that a Person each have his own Item. Do you have any suggestions?

Class simulate:

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

Class Person:

private Item item;

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

5 回答 5

3

我怀疑你get应该是set

要使所有 Person 对象都使用同一个对象,您必须创建您的 field static。不要那样做,static从该字段中删除关键字。我建议您不要将字段设为静态,除非它们是常量(在可能的情况下)

于 2012-12-18T17:04:11.517 回答
2

你的代码有各种各样的错误,我确定它不能编译。

如果要构建一个 Person 对象,并在构造函数上传递一个 object 类型的参数,则需要执行以下操作:

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 区分大小写。

自从将字段分配给自身以来, Linethis.object = object;在您的代码中什么也不做。object单独的变量Object不起作用。你应该得到警告。

另外你最好命名方法setObject

于 2012-12-18T17:04:25.120 回答