在Java 中,始终需要重点理解对象之间的关联(拥有)关系,比如你有一些同学(同类),图中,房间周围有四个房间,你有一个老师(不同类),请编写房间类表达图中的房间关系,*同时给房间类写一个方法,能够从某一出口出来进入对应的房间。今后可以此为基础,实现一个简单的城堡游戏程序。
时间: 2024-11-03 07:21:28 浏览: 26
在Java中,我们可以创建一个名为`Room`的类来表示图中的房间,它可能会包含一些基本属性,如编号、方向(出口)以及当前居住的对象(老师或者学生)。为了表示学生和老师的关联,我们可以将他们作为房门类的内部持有者,例如`Door`类,然后在`Room`类中维护一个`List<Door>`类型的成员变量。
```java
// 定义一个基础的房间类
public class Room {
private int id;
private List<Door> doors;
// 构造函数和 getters/setters 省略
public Room(int id) {
this.id = id;
this.doors = new ArrayList<>();
}
// 添加门的方法
public void addDoor(Door door, Direction direction) {
door.setDestination(this);
doors.add(door);
}
// 从特定出口出去并进入另一个房间的方法
public Room exitAndEnterThroughDoor(Direction exitDirection) {
Door matchingDoor = doors.stream()
.filter(door -> door.getExitDirection() == exitDirection)
.findFirst()
.orElse(null); // 如果找不到匹配的门则返回null
if (matchingDoor != null) {
Room targetRoom = matchingDoor.getTargetRoom();
matchingDoor.close(); // 关闭出口门
return targetRoom; // 返回目标房间
} else {
System.out.println("无法通过该出口离开!");
return this; // 如果没有找到匹配的出口,则保持原地
}
}
}
// 定义一个门类,代表房间的出口
enum Direction {NORTH, SOUTH, EAST, WEST}
class Door {
private Room sourceRoom;
private Room targetRoom;
private Direction exitDirection;
// 设定源房间、出口方向等方法省略
public void setDestination(Room room) {
this.targetRoom = room;
}
public Room getTargetRoom() {
return targetRoom;
}
public void close() {
sourceRoom.removeDoor(this);
targetRoom.addDoor(new Door(targetRoom, sourceRoom, getExitDirection()));
}
}
// 学生类和老师类在此基础上添加关联自身到房间的关系
class Student extends Person {
// 添加关联到房间的方法省略
}
class Teacher extends Person {
// 添加关联到房间的方法省略
}
// 基础人 类Person 可能包含姓名属性及与房间的关联,此处略去
```
阅读全文