2012-02-27 225 views
1

原諒我,我是Java新手!併爲一個大學項目,我有幾個概念的麻煩,我試圖谷歌周圍無濟於事。如何在MarsRoom類中實例化一定數量的加熱器類加熱器,然後在MasterControlPanel的主體中訪問它們。但取決於在構造函數中設置的numheaters的數量??。我已經嘗試過,但它不識別對象room1.roomheaters [0]。但它確實承認它,如果我只是實例化一個對象,如加熱器roomheaters =新加熱器();. 非常感謝Java對象實例化

public class MasterControlPanel{ 

    public static void main(String[] args){ 

    MarsRoom room1 = new MarsRoom(40, 40, 20, 20, 8, 2, 4); 
    MarsRoom room2 = new MarsRoom(40, 40, 20, 20, 8, 2, 4); 
    MarsRoom room3 = new MarsRoom(40, 40, 20, 20, 8, 2, 4); 
    MarsRoom room4 = new MarsRoom(40, 40, 20, 20, 8, 2, 4); 
    room1.createheaters(); 

    System.out.println("Turned " + (room1.roomheaters[0].getHeater() ? " ON" : " OFF")); 
    } 
} 


public class MarsRoom extends Rooms implements RoomInterface{ 

int roomareasq; 
int heatloss; 
float insideTemp; 
float outsideTemp; 
float uvalue; 
int numheaters; 
int numlights; 
Heaters roomheaters[] = new Heaters[numheaters]; 

public MarsRoom(){ 
} 

public MarsRoom(int windowsH, int windowsW, int wallsH, int wallsW, int windowC, int heaters, int lights){ 
    windowsHeight = windowsH; 
    windowsWidth = windowsW; 
    wallsHeight = wallsH; 
    wallsWidth = wallsW; 
    windowCeiling = windowC; 
    numheaters = heaters; 
    numlights = lights; 
} 

public void createheaters(){ 
for (int i=0; i < numheaters; i++) 
{ 
roomheaters[i] = new Heaters(); 
} 
} 


public void calculateheatloss(){ 

} 

} 
+0

凡'roomheaters'宣佈進入加熱器? – talnicolas 2012-02-27 18:31:04

+0

「不承認」是什麼意思?你是否收到NullPointerException或其他錯誤? – 2012-02-27 18:32:10

回答

2

陣列roomheaters是從未宣佈過,所以這是不可能的填充它,讓我們從另一個類單獨訪問它作爲一個MarsRoom的屬性:

roomheaters[i] = new Heaters(); 
// variables must be declared to be assigned 

看一看declaring member variablesOracle


UPDATE

要訪問變量作爲對象屬性,如room1.roomheaters[0],它必須是成員變量。您只創建了一個本地變量,該變量在函數返回後立即消失。以上鍊接應該有所幫助

+0

嘿,謝謝是的,我已經更新了上面的代碼,但它仍然沒有認出它。我收到錯誤「找不到符號」 – user969729 2012-02-27 18:38:19

+0

室外機已宣佈,但位置錯誤。 – nist 2012-02-27 18:38:48

+0

@ user969729要訪問像「room1.roomheaters [0]」這樣的對象屬性的變量,它必須是_member_變量。您只創建了一個_local_變量,只要該函數返回就會立即消失。 – paislee 2012-02-27 18:42:09

1

您必須將室外空間的實例化移出函數和類變量,並創建一個方法來訪問加熱器。在MarsRoom類補充一點:

public Heaters[] getHeaters(){ 
    return roomheaters; 
} 

而且你可以通過調用room1.getHeaters()

+0

是的,這個方法是在MarsRoom類中實例化的加熱器類中。所以我應該可以訪問它? – user969729 2012-02-27 18:37:33

+0

是的,你有它的存取權限,但它是你沒有權限的房間變量。 – nist 2012-02-27 18:50:10