2012-02-27 234 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