Как создать и вернуть перечисление в методе в java - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть метод, который должен возвращать перечисление, однако я не уверен, как его кодировать (это упражнение из моей статьи). Ниже приведен метод (в классе Maze):

private MazeStatus[][] stringToMaze(String sMaze) {

    String[] splitString = sMaze.split("\n");
    char[][] array = new char[splitString.length][];
    MazeStatus[][] mazeStat;

    for (int x = 0; x < splitString.length; x++) {
        array[x] = new char [splitString[x].length()];
        array[x] = splitString[x].toCharArray();


        for (int y = 0; y < splitString[x].length(); y++) {
            switch (array[x][y]) {
                case '.':
                    mazeStat[x][y] = MazeStatus.VISITED;
                    break;
            }
        }
    }
    return null; // TO DO (Part 1): change appropriately
}

Вот класс MazeStatus:

public enum MazeStatus {

OPEN(' '), OBSTACLE('#'), GOAL('x'), VISITED('.');

private char text;

MazeStatus(char s) {
    this.text = s;
}

public char text() {
    return this.text;
}

}

В методе, который я пытался создать перечисление

MazeStatus [] [] mazeStat;

и добавление к нему значений:

mazeStat [x] [y] = MazeStatus.VISITED;

Но, конечно, он жалуется на то, что он не инициализирован. Я не знаю, как инициализировать перечисление, особенно перечисление двумерного массива, без создания фактического объекта Maze.

Как всегда, вся помощь приветствуется!

Ответы [ 2 ]

4 голосов
/ 06 апреля 2020

Вам нужно определить размер вашего 2D-массива, например:

MazeStatus[][] mazeStat = new MazeStatus[row.length][column.length];

Я точно не знаю, какой будет размер в вашем случае, поэтому я использовал row.length и column.length. Но, пожалуйста, замените их значениями, которые имеют смысл в вашем коде.

1 голос
/ 06 апреля 2020
    private MazeStatus[][] stringToMaze(String sMaze) {

        String[] splitString = sMaze.split("\n");
        char[][] array = new char[splitString.length][];

        //this is missing in your code ........
        MazeStatus[][] mazeStat=new MazeStatus[splitString.length][column.length];

        for (int x = 0; x < splitString.length; x++) {
            array[x] = new char [splitString[x].length()];
            array[x] = splitString[x].toCharArray();


            for (int y = 0; y < splitString[x].length(); y++) {

                switch (array[x][y]) {
                case '.':
                    System.out.println("x"+x+" y"+y);
                    mazeStat[x][y] = MazeStatus.VISITED;
                    break;

                default:
                    mazeStat[x][y]=MazeStatus.OPEN;
                  /*
                   *this you have to put accordingly because if default condition 
                   *won't 
                   *be there then it will take null values and it will throw 
                   *nullpointer exception
                   */
                }
            }
        }
        return mazeStat; // TO DO (Part 1): change appropriately
    }
...