通过迭代创建对象时,如何获取特定对象?

时间:2012-09-11 21:26:05

标签: java object iteration acm-java-libraries

我有一个GRect

类型的实例变量
private GRect brick;

我通过迭代创建了几个

private void makeBrickLineX(int x, int y, Color color)
{
    for (int i = 0; i < NBRICKS_PER_ROW; i++, 
                        x += BRICK_WIDTH + BRICK_SEP)                // Sets the x locations and separation between each brick.
    {                                                
        GRect brick  = new GRect (BRICK_WIDTH, BRICK_HEIGHT);
        brick.setFilled(true);
        brick.setColor(color);
        add(brick, x,y);
    }
}

问题是,我正在创造一个“突破”游戏,我需要知道什么时候球已经打了砖头。它的代码很简单,我使用一个名为getElementAt(球x和y位置)的方法,这一切都有效。但是有几块砖块,并在砖remove (brick)上调用删除。只删除最右下角的一块砖,所以这些砖块不能共用同一个名称?我该怎么做才能使它适用于所有“砖块”实例。

3 个答案:

答案 0 :(得分:0)

您使用存储砖的底层数据结构是什么?删除(砖)做什么?如果您使用散列数据结构,似乎是hashCode()和/或equals()方法的问题。

答案 1 :(得分:0)

每次致电

GRect brick = new GRect (BRICK_WIDTH, BRICK_HEIGHT)

你正在创建一个新的变量'brick',它被设置为一个新的GRect对象。在Java中,每个变量必须具有唯一的名称,因此您不能拥有多个名为“brick”的GRect对象。

为了解决这个问题,每次创建一个名为“brick”的对象时,Java都会用第二个名为“brick”的对象覆盖名为“brick”的上一个对象。因此,变量名称“brick”仅与您创建的最终砖块对象相关联。

您可能仍在使用add()方法将您创建的每个砖块对象添加到某些数据存储中。你能告诉我们你的add()方法的代码吗?你的add()方法最有可能将每个砖块添加到某个数据结构中,然后你可以通过它直接删除所有砖块。

答案 2 :(得分:0)

您可以删除GRect的所有实例,但您只是保留对名为brick的最后一个实例的引用,并将其从视图中删除。如果您已经将所有砖块都存储在对象中,则可以删除它们,例如在List的情况下通过给出数字索引来删除它们:

List allBricks = getAllBricks();
int removeIndex = getIndexForRemove();
allBricks.remove(removeIndex);

在与球的位置进行比较时,您如何阅读砖块的位置?