2013-02-11 60 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對象的值。