Я сделал класс для развлечения, но он действительно быстро исчерпал кучу места?

1

Это мой второй семестр в колледже, и мы узнали о связанныхLists (Nodes). У меня была идея сделать что-то подобное для удовольствия в java, которое является классом Room с 4 указателями на другие объекты Room: север, юг, запад, восток, и каждый объект Room также содержит объект char, поэтому я могу отслеживать Это.

Моя основная функция запрашивает вход w/a/s/d из сканера, а затем создает/указывает на соответствующую комнату и заполняет каждую комнату символом.

Однако по какой-то причине он быстро выходит из кучного пространства (например, когда появляются символы)?).

Вот мой код:

import java.util.*;

public class Room {
    // instance variables
    private Room north, west, east, south;
    private char object;
    private static char counter = ' ';

    // constructors
    public Room() {
    }

    public Room(char object) {
        this.object = object;
    }

    // methods
    public Room newRoomNorth() {
        north = new Room();
        north.south = this;
        return north;
    }

    public Room newRoomWest() {
        west = new Room();
        west.east = this;
        return west;
    }

    public Room newRoomEast() {
        east = new Room();
        east.west = this;
        return east;
    }

    public Room newRoomSouth() {
        south = new Room();
        south.north = this;
        return south;
    }

    public Room linkRoomNorth(Room linkedRoom) { // link a given room to given direction of this room, returns what room was overwritten (if any)
        Room overwritten = north;
        north = linkedRoom;
        north.south = this;
        return overwritten;
    }

    public Room linkRoomWest(Room linkedRoom) {
        Room overwritten = west;
        west = linkedRoom;
        west.east = this;
        return overwritten;
    }

    public Room linkRoomEast(Room linkedRoom) {
        Room overwritten = east;
        east = linkedRoom;
        east.west = this;
        return overwritten;
    }

    public Room linkRoomSouth(Room linkedRoom) {
        Room overwritten = south;
        south = linkedRoom;
        south.north = this;
        return overwritten;
    }

    public Room getRoomNorth() {
        return this.north;
    }

    public Room getRoomWest() {
        return this.west;
    }

    public Room getRoomEast() {
        return this.east;
    }

    public Room getRoomSouth() {
        return this.south;
    }

    public char getObject() {
        return this.object;
    }

    public void setObject(char object) {
        this.object = object;
    }

    public void fill() { // puts a character as object
        this.setObject(counter);
        counter = (char) (counter + 1);
    }

    // main
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String input = "";
        Room currentRoom = new Room('');
        while (!input.equalsIgnoreCase("exit")) {
            System.out.println("This room treasure is: " + currentRoom.getObject());
            System.out.println("Which way? (w/a/s/d)");
            input = scan.next();
            switch (input.charAt(0)) {
                case 'w':
                    if (currentRoom.getRoomNorth() == null) {
                        currentRoom = currentRoom.newRoomNorth();
                        currentRoom.fill();
                    } else {
                        currentRoom = currentRoom.getRoomNorth();
                    }
                    break;
                case 'a':
                    if (currentRoom.getRoomWest() == null) {
                        currentRoom = currentRoom.newRoomWest();
                        currentRoom.fill();
                    } else {
                        currentRoom = currentRoom.getRoomWest();
                    }
                    break;
                case 'd':
                    if (currentRoom.getRoomEast() == null) {
                        currentRoom = currentRoom.newRoomEast();
                        currentRoom.fill();
                    } else {
                        currentRoom = currentRoom.getRoomEast();
                    }
                    break;
                case 's':
                    if (currentRoom.getRoomSouth() == null) {
                        currentRoom = currentRoom.newRoomSouth();
                        currentRoom.fill();
                    } else {
                        currentRoom = currentRoom.getRoomSouth();
                    }
                    break;
            }
        }
    }
} 
  • 0
    Я не вижу ничего явно неправильного, но я заметил, что ваши linkRoomXXX() никогда не вызываются.
  • 0
    Где веселье?
Показать ещё 1 комментарий
Теги:
linked-list
heap
nodes

1 ответ

0

Я не получаю никаких проблем с кучей пространства, но после достижения '?' все новые комнаты все еще есть '?' , скорее всего, потому что (char) ('?' + 1) будет продолжать возвращать '?' , Возможно, это ошибка с вашей версией Java. Какова ваша версия ОС и JDK?

  • 0
    Я почти уверен, что (char)('?' + 1) равно '@' .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню