Как мне вернуть null в методе getter и не печатать «null» в методе toString при получении выходных данных в текстовом «обходе подземелья»?

#java #methods

#java #методы

Вопрос:

Я пытаюсь создать объект Room, который использует методы getter и setter. Для каждой комнаты есть либо комната, либо нет комнаты (null) для N, E, W или S.

1) Каждый объект Room содержит ссылки на до четырех других объектов Room (N, E, W или S)

2) Метод toString() должен включать название комнаты, описание комнаты и метод getExits()

 public class Room {

 private String name;
 private String description;
 private Room north;
 private Room east;
 private Room west;
 private Room south;

 public Room(String name, String description) {
      this.name = name;
      this.description = description;
 } //end Room constructor class


 public String getName() {
      this.name = name;
      return this.name;
 }

 // public String getExits() {
 //      if()
 // }

 public Room getEast() {
      if (this.east == null) {
           return null;
      }
      return this.east;
 }

 public Room getNorth() {
      if (this.north == null) {
           return null;
      }
      return this.north;
 }

 public Room getWest() {
      if (this.west == null) {
           return null;
      }
      return this.west;
 }

 public Room getSouth() {
      if (this.south == null) {
           return null;
      }
      return this.south;
 }

 public void setExits(Room n, Room e, Room w, Room s) {
      this.north = n;
      this.east = e;
      this.west = w;
      this.south = s;
 } //end setExits

 public String toString() {
      String nm;
      nm = "[" name "]" "n"  
      description   "n"  
      getExits(); //need this method 
      return nm;
 }
 

} // конечный класс DungeonCrawl

 #this is what I wan't my output to look like#
[Hall]
Its Dark.
[N]orth: Bed
[E]ast : Bath
[W]est : Dining
 

Комментарии:

1. Я лично считаю, что это ужасная идея — создавать класс, в котором объекты класса являются переменными.

2. это присваивание. Я согласен. Не имеет особого смысла делать это так, как я должен это делать, но для того, чтобы получить полный кредит, это должно быть сделано именно так. Хотя спасибо за ввод.

Ответ №1:

Я не знаю, понял ли я ваш вопрос, но, может быть, вы можете сделать что-то вроде этого:

 public String toString() {
    return yourVariable == null ? "" : "text"
}
 

В этом случае, если yourVar равно null , оно будет возвращено в методе получения, в то время toString как вернет все, что вы хотите.

Ответ №2:

Вы всегда можете использовать @override .

     @Override
    public String toString(){
    return "[" name "]n" description "n" getExits();
    }

    public String getExits(){
    StringBuilder builder = new StringBuilder();
    if(west != null)
    builder.append("[W]est: " west.getName() "n");
    else
    builder.append(";"); //append nothing if exit does not exist in that direction
    //repeat for every room
    return builder.toString();
    }
 

Для этого требуется импортировать StringBuilder в ваш класс, вы также можете использовать обычную конкатенацию строк вместо этого