2013-02-11 61 views
0

所以我对Java相对较新,而且我一直在使用Eclipse。这是最后三行的主要部分,我想让对象myBrick多次出现。如果我运行它,它只会出现在第二个位置(最后一行)。可能吗?添加java对象两次

import acm.graphics.*; 
import acm.program.*; 
import java.awt.*; 

public class Pyramid extends GraphicsProgram { 

    /** Width of each brick in pixels */ 
    private static final int BRICK_WIDTH = 30; 

    /** Height of each brick in pixels */ 
    private static final int BRICK_HEIGHT = 12; 

    /** Number of bricks in the base of the pyramid */ 
    private static final int BRICKS_IN_BASE = 14; 

    public void run() { 
     double windowWidth = 756; 
     double windowHeight = 494; 
     int numberOfBricks = (BRICKS_IN_BASE*(BRICKS_IN_BASE+1))/2; 

     double emptySpace = windowWidth - (BRICK_WIDTH*BRICKS_IN_BASE); 
     int cushion = (int)emptySpace/2; 

     GRect myBrick = new GRect(BRICK_WIDTH, BRICK_HEIGHT); 
     add(myBrick, cushion, (windowHeight-BRICK_HEIGHT)); 
     add(myBrick, (cushion+BRICK_WIDTH), (windowHeight-BRICK_HEIGHT)); 
    } 
} 
+0

什么是add()函数? – LPD 2013-02-11 05:22:36

+0

我相信它把对象添加到窗口 – user1157549 2013-02-11 05:23:57

+0

出现多次的地方? – 2013-02-11 05:28:21

回答

2

我认为当你使用它使用相同的myBrick对象,而不是创造的第二个第二add()方法的问题可能是。尝试为第二个add()函数创建一个新的GRect对象。

+0

这就是事情,我想多次添加相同的对象。 – user1157549 2013-02-11 05:38:27

+0

不看add()就很难找出问题。 add()方法在调用时可能会用新的值覆盖以前的值。 – 2013-02-11 05:43:08

+0

我认为是这样的...有没有比add()更好的方法? – user1157549 2013-02-11 05:46:35

0

第二个add()与第一个使用相同的对象引用。 Java是一个传递值语言,但它将引用的值传递给对象。这意味着第一个add()myBrick的任何突变都会被第二个add()调用看到,我确信这个调用违反了程序的语义。 (我建议你阅读this SOF post

GRect对象的构造似乎并不过于复杂,那么为什么不复制此指令,并用它为每个add()调用的第一参数的?这样,你确保你有两个GRect对象以相同的状态开始,但修改一个不会影响另一个。

+0

我有这些'GRect'的数量不确定,他们需要在不同的地方 – user1157549 2013-02-11 06:02:23

+0

编写一个循环,为每次调用'add()'创建一个新的GRect对象。 – ecbrodie 2013-02-11 21:32:00

0

正如其他人指出的,没有看添加方法,很难给你答案。但如果我没有错,可能是你正在寻找类似的东西,

  1. 创建该对象的列表。 List rectList = new ArrayList();
  2. 创建GRect的新对象,然后调用add函数。
  3. 将新的GRect对象添加到rectList。

这样在列表中你将有三个GRect对象。您可以迭代并获取GRect对象的值。