gpt4 book ai didi

Java访问实例变量

转载 作者:行者123 更新时间:2023-11-29 06:02:45 24 4
gpt4 key购买 nike

我怎样才能使名为 rooms 的对象数组在最后称为 retrieveRoom(); 的静态方法可以访问?我尝试了 public static Rooms rooms[] = new Rooms[3]。但我只是从中得到错误。感谢您的帮助。

public class MasterControlPanel{

public static void main(String[] args){

Rooms rooms[] = new Rooms[3];

rooms[0] = new Rooms("Room U", 1, 4, 4);
rooms[1] = new Rooms("Room U", 2, 4, 4);
rooms[2] = new Rooms("Connector X", 3, 2, 4);
rooms[3] = new Rooms("Connector U", 4, 2, 4);

for(int x = 0; x <= rooms.length; x++){
rooms[x].createLights();
rooms[x].createWalls();
}
}

public static Object retrieveRoom(int connectedRoom){

connectedRoom -= 1;
return rooms[connectedRoom];
}

最佳答案

移动

public static Rooms[] rooms = new Rooms[4];

在你的 main() 方法之外,像这样进入声明部分

public class MasterControlPanel {
public static Rooms[] rooms = new Rooms[4];
public static void main(String[] args) {
...
}
}

这将在您的 MasterControlPanel 类中定义一个 rooms static 成员

这里有一些其他的提示:

  1. 只要 Class 存在,就可以访问静态成员。但是,为了访问实例成员(属于该类的实例 的变量),您需要该类的一个实例。
  2. 使用 Rooms[] rooms = new Rooms[4];。请注意,数组括号已移至 Type 部分,这将防止将来出现混淆。 “让我们定义一个名为 rooms 的房间数组”。这不是必需的,但这是一件好事。
  3. 您正在定义大小为 3rooms 数组,但是您正在向其中添加 4 元素。这将导致 ArrayIndexOutOfBounds 异常。
  4. 你应该让你的成员private来实现Encapsulation .您可以提供 publicprotected 方法来从您的类中检索那些 private 成员。
  5. 当数组包含 n 元素时,您可以对该数组进行的最大连续迭代次数也是 n 这是肯定的。这意味着在 for 循环中,确保最后一次迭代的循环条件为 n-1。请记住,大小为 4 的数组中没有第 4 个元素。

下面是代码

public class MasterControlPanel {
public static Room[] rooms = new Room[4];

public static void main(String[] args) {

rooms[0] = new Room("Room U", 1, 4, 4);
rooms[1] = new Room("Room U", 2, 4, 4);
rooms[2] = new Room("Connector X", 3, 2, 4);
rooms[3] = new Room("Connector U", 4, 2, 4);

for (int x = 0; x <= rooms.length-1; x++) {
rooms[x].createLights();
rooms[x].createWalls();
}
}

public static Room retrieveRoom(int connectedRoom) {
connectedRoom -= 1;
return rooms[connectedRoom];
}

}

class Room {
// These are instance members for Room class
private String roomString;
private int roomInteger1, roomInteger2, roomInteger3;

public Room(String string, int integer1, int integer2, int integer3) {
// This is the constructor for Room object
this.roomString = string;
this.roomInteger1 = integer1;
this.roomInteger2 = integer2;
this.roomInteger3 = integer3;
}

public void createLights() {
// This method creates lights
}

public void createWalls() {
// This method creates walls
}

// These are Getters and Setters for Room members
public String getRoomString() {
return roomString;
}

public void setRoomString(String roomString) {
this.roomString = roomString;
}

public int getRoomInteger1() {
return roomInteger1;
}

public void setRoomInteger1(int roomInteger1) {
this.roomInteger1 = roomInteger1;
}

public int getRoomInteger2() {
return roomInteger2;
}

public void setRoomInteger2(int roomInteger2) {
this.roomInteger2 = roomInteger2;
}

public int getRoomInteger3() {
return roomInteger3;
}

public void setRoomInteger3(int roomInteger3) {
this.roomInteger3 = roomInteger3;
}
}

关于Java访问实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9559070/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com