gpt4 book ai didi

java - 对象共享另一个对象(处理 3.3.7)

转载 作者:行者123 更新时间:2023-12-02 11:21:14 25 4
gpt4 key购买 nike

大家好 Stack Overflow :)

在编码方面,我是一个巨大的新手,而且我刚刚遇到了一个我的大脑无法克服的问题......

在我开始谈论这个问题之前,我将粘贴我的代码,以便提供一些上下文(如果看到它让你想吐,请提前抱歉)。该问题的主要焦点已发表评论,因此应该相当明显:

主要

ArrayList<Individual> individuals = new ArrayList<Individual>();

void setup()
{
size(500,500);

for(int i = 0; i < 2; i++)
{
individuals.add(new Individual());
}

println(frameRate);
}

void draw()
{
background(230);

for(int i = 0; i < individuals.size(); i++)
{
individuals.get(i).move();

individuals.get(i).increaseTimers();

individuals.get(i).display();
}
}

个人

class Individual
{
float x;
float y;
int size = 5;

Timer rdyBreed; /* Here is the object that appears to be shared
between individuals of the ArrayList */
float breedRate;
float breedLimit;

Individual()
{
x = random(0, width);
y = random(0, height);

rdyBreed = new Timer("rdyBreed", 0);
breedRate = random(.2, 3);
breedLimit = random(10, 20);
}

void move()
{
int i = (int)random(0, 1.999);
int j = (int)random(0, 1.999);

if (i == 0)
{
x = x + 1;
} else
{
x = x - 1;
}

if (j == 0)
{
y = y + 1;
} else
{
y = y - 1;
}

checkWalls();
}

void checkWalls()
{
if (x < size/2)
{
x = width - size/2;
}
if (x > width - size/2)
{
x = size/2;
}
if (y < size/2)
{
y = width - size/2;
}
if (y > width - size/2)
{
y = size/2;
}
}

void display()
{
noStroke();

if (!rdyBreed.finished)
{
fill(255, 0, 0);
} else
{
fill(0, 255, 0);
}

rect(x - size/2, y - size/2, size, size);
}

void increaseTimers()
{
updateBreedTimer();
}

void updateBreedTimer()
{
rdyBreed.increase(frameRate/1000);
rdyBreed.checkLimit(breedLimit);
rdyBreed.display(x, y);
}
}

计时器

class Timer
{
float t;

String name;

boolean finished = false;

Timer(String name, float t)
{
this.t = t;

this.name = name;
}

void increase(float step)
{
if (!finished)
{
t = t + step;
}
}

void checkLimit(float limit)
{
if (t >= limit)
{
t = 0;

finished = true;
}
}

void display(float x, float y)
{
textAlign(RIGHT);
textSize(12);
text(nf(t, 2, 1), x - 2, y - 2);
}
}

现在已经完成了,让我们来回答我的问题。

基本上,我正在尝试创建某种个人康威生命游戏,但我立即遇到了很多问题。

现在,我在编写这段代码时的想法是,组成小型模拟“社会”的每个人对于不同的生活事件都有不同的计时器和值,例如交配生 child 。

问题是,我不是面向对象编程的专家,因此我很不明白为什么这些对象没有各自的计时器,而是对同一个计时器的引用。

我猜想制作一个计时器的 ArrayList 并使用多态性来发挥我的优势可以做出改变,但我不太确定它或真正如何做到这一点......是的,我需要帮助。

提前致谢:)

编辑:这是调试器的屏幕截图。每次更新迭代时,这些值都保持相同。

Screenshot

最佳答案

是什么让您认为它们引用相同的 Timer 对象?调试器中显示的 t 值将保持不变,直到其中一个达到 breedLimit 并且被设置为 0,因为它们同时被初始化。尝试一下,看看 t 的值为 different .

void setup() {
size(500,500);
}

void mouseClicked() {
individuals.add(new Individual());
}

我建议在此处设置断点:

t = 0;
finished = true;

关于java - 对象共享另一个对象(处理 3.3.7),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49908104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com