我正在使用两个单独的类AnimalRoom。用内部数组实例化Room。然后实例化Animal对象,并将其放置在Room内的数组中。如何为Animal对象提供对其放置的Room的引用,以便当我对它们调用look()方法时,它们可以返回其所在房间的名称?

public static void main(String[] args) {

Room mainRoom = new Room("The Lobby");

Animal gizmo = new Animal("Gizmo");
mainRoom.addAnimal(gizmo);

System.out.println(mainRoom.toString());

gizmo.look();
}

--
public class Room {

private String name;
private Animal[] animals;
private Room currentRoom;
int i = 0;


public Room(String name) {
setName(name);
animals = new Animal[10];
}

public String toString() {
String temp = new String();
temp += "\nThis room is " + name + ".\n\n";
temp += "In the lobby are the following animals: \n";
for (Animal s : animals) {
    temp += s.toString() + "\n";
}
return temp;
}

public void setName(String name) {
this.name = name;
}

public void addAnimal(Animal a) {
    if (i < 10) {
    if (animals[i] != null) {
    i++;
    addAnimal(a);
    } else {
    animals[i] = a;

    }
} else {
    System.out.println("Room full");
}
}

}

--
public class Animal {

private Room currentRoom;
private String name;

public Animal() {
}

public Animal(String name) {
setName(name);
}

public void setName(String name) {
this.name = name;
}

public String toString() {
return "\t" + name;
}

public void look() {
    System.out.println(name + " is currently in " + getCurrentRoom());
//getCurrentRoom().toString();
}

public Room getCurrentRoom() {
return this.currentRoom;
}

public void setCurrentRoom(Room currentRoom) {
this.currentRoom = currentRoom;
}
}

最佳答案

我认为最优雅的解决方案是在Room的addAnimal函数内部

  public void addAnimal(Animal a) {
    if (i < 10) {
        if (animals[i] != null) {
            i++;
            addAnimal(a);
        } else {
            animals[i] = a;
            a.setCurrentRoom(this); // Setting room of animal
        }
    } else {
        System.out.println("Room full");
    }
}

10-07 19:10
查看更多