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

Java 当通过迭代创建对象时,如何获得特定对象?,java,object,iteration,acm-java-libraries,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 location

我得到了一个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);
    }
}
private void makeBrickLineX(int x,int y,Color)
{
对于(int i=0;i

问题是,我正在创建一个“突破”游戏,我需要知道球何时击中了砖块。它的代码很简单,我使用了一个名为getElementAt(balls x&y location)的方法,这一切都很有效。但是有几个砖,在砖上调用remove
remove(砖)
。仅移除右下角的一块砖,因此这些砖不能共享相同的名称?如何使其与所有“砖块”实例一起工作。

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

每次调用

GRect brick = new GRect (BRICK_WIDTH, BRICK_HEIGHT)
您正在创建一个新变量“brick”,该变量被设置为一个新的GRect对象。在Java中,每个变量必须有一个唯一的名称,因此不能有多个分别命名为“brick”的GRect对象

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


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

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

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

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

您应该显示更多代码,例如,此“添加”方法如何存储砖块?
getElementAt()
函数是如何工作的,您确定remove是正确的吗?这还不清楚。。。什么是
remove(brick)
add(brick,x,y)
?我假设
add(brick…)
只是绘制砖块,对吗?您似乎并没有将每个块存储在任何类型的数组/列表/容器中。