有关类内类的OOP相关问题

时间:2019-09-21 14:07:19

标签: java class oop

上下文:

所以基本上我有一个Map类,其中包含一个名称,另一个类称为RoomRoom包含一个其门数的整数,以及一个名为Door的类。 Door包含一个表示门位置的字符,可以是N(正交),E(ast),S(outh),W(est)。

问题:

这是我设置Room类的方式:

public class Room {
    int doors;
    Door door;


    public Room(int doors, Door door) {
        this.doors = doors;
        this.door = door;
    }
}

但是这种方式我只能给它分配1个门,而且我需要能够分配与int门的值相等的门数量。有任何想法吗?

4 个答案:

答案 0 :(得分:3)

简单地说,您必须使用可以包含多个门的数组或列表

public class Room {
        Door doors[];
    }

或者,如果您不确定创建房间对象时的门数,因为数组的大小是固定的,则可以创建一个数组列表。

public class Room {
    List<Door> doors = new ArrayList<Door>();
}

如果使用数组,则可以使用构造函数初始化门对象

public Room(int num) {
        this.doors = new Door[num];
        Arrays.fill(this.doors,new Door());
    }

答案 1 :(得分:1)

您可以使用ListDoor存储在Room类中,并添加多个构造函数以支持创建具有Room数组的DoorList中的Door个。另外,您还可以定义实例化之后将Door添加到Room的方法。

public class Room {

    private final List<Door> doors = new ArrayList<>();

    public Room(Door... doors) {
        this.doors.addAll(Arrays.asList(doors));
    }

    public Room(List<Door> doors) {
        this.doors.addAll(doors);
    }

    public void addDoor(Door door) {
        this.doors.add(door);
    }

    public List<Door> getDoors() {
        return doors;
    }
}
  

如果您对Door课程的一些建议感兴趣,请   阅读以下内容。

由于方向可以是NESW,因此最好使用enum而不是一般的{{1 }}值,将方向值仅限制为这4个值。

答案 2 :(得分:0)

使用一系列门。您不需要门的数量,因为它等于数组的长度

答案 3 :(得分:0)

例如,您可以使用HttpResponse {headers: HttpHeaders, status: 200, statusText: "OK", url: "**********", ok: true, …} body: {id: 1, email: "*********", created_at: "2019-09- 21T11:02:31.833Z", updated_at: "2019-09-21T11:02:31.833Z"} headers: HttpHeaders lazyInit: () => {…} lazyUpdate: null normalizedNames: Map(0) {} __proto__: Object ok: true status: 200 statusText: "OK" type: 4 url: "********" __proto__: HttpResponseBase 个数组:

$large_number= "'".(string)$data->orders_id;

这样,您甚至不需要存储门的数量,因为它只是Door数组的public class Room { Door[] doors; public Room(int n) { this.doors = new Door[n]; for (int i = 0; i < n; i++) { this.doors[i] = new Door(); } } }