Как создать массив, содержащий массивы в java - PullRequest
0 голосов
/ 04 апреля 2020

Я пытаюсь создать массив символов, который содержит несколько массивов символов. Ниже приведен метод, при запуске которого я получаю сообщение об ошибке « char [] не может быть преобразовано в char »:

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

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

    for (int x = 0; x < splitString.length; x++) {
        array[1][x] = splitString[x].toCharArray();
    }
    return null; // TO DO
}

Как мне сделать так, чтобы оно содержит массивы символов, назначенные только символам?

Я искал переполнение стека для аналогичного вопроса и нашел один с таким же названием , как у меня. Один из ответов был таким:

String[][] arrays = { array1, array2, array3, array4, array5 };

Я понимаю вышеописанный метод, однако я не могу этого сделать, так как сначала мне нужно l oop через массив строк, преобразовать каждую строку в массиве к массиву символов, и тогда я могу только добавить его в массив, содержащий массивы (что я не уверен, как это сделать, не инициализируя его с массивами, как сказано в ответах выше)

Ответы [ 2 ]

1 голос
/ 04 апреля 2020

У вас много заблуждений относительно Java. Позвольте мне продемонстрировать номера строк.

private MazeStatus[][] stringToMaze(String sMaze) {
    String[] splitString = sMaze.split("\n"); // line 1
    char[][] array = new char[1][]; // line 2

    for (int x = 0; x < splitString.length; x++) {  // line 3
        array[1][x] = splitString[x].toCharArray(); // line 4
    }
    return null; // TO DO
}

Я предполагаю, что вы хотите взять ввод и преобразовать его в объект MazeStatus (который, по-видимому, отсутствует в вашем вопросе). В строке:

1 - вы получаете каждую строку лабиринта, которая представлена ​​символами.

2 - вы объявляете двумерный массив символов, но инициализируете только одно из измерений. Если вы заметите, вы обнаружите, что другое измерение массива все еще неизвестно.

3 - Вы go по каждой из строк лабиринта.

4 - Вы конвертируете строка (splitString [x]) в массив символов. Вы берете 1-е измерение двумерного массива (хотя ваш код инициализировал это измерение, чтобы иметь длину 1). Если вы все еще не нашли проблему, вы должны знать, что массивы Java проиндексированы на основе 0. Подробнее об этом . Игнорируя эту ошибку, вы также пытаетесь сохранить целый массив символов во 2-м измерении, тогда как вы еще не инициализировали это измерение.

Итак, что вам нужно сделать:

  1. Вам необходимо установить длину первого измерения равным количеству строк, которые будут у вас в лабиринте.

  2. Для каждой строки (строки): инициализируйте 2-е измерение массива длиной этой строки, а затем установите массив символов [row] = splitString [x] .toCharArray ();

Ниже вы можете найти измененную версию :

private String stringToMaze(String sMaze) {

    String[] splitString = sMaze.split("\n");
    char[][] array = new char[splitString.length][];
    for (int x = 0; x < splitString.length; x++) {
        array[x] = new char [splitString[x].length()];
        array[x] = splitString[x].toCharArray();

        for (int i = 0; i< splitString[x].length(); i++) {=
            System.out.print(array[x][i]);
        }
        System.out.println();
    }
    return null; // TO DO
}
0 голосов
/ 04 апреля 2020

Эта ошибка нормальная. Вы пытаетесь повлиять на Array Object на значение примитива char array[1][x]. Это два разных типа.

Также array[1][x] сгенерирует исключение, потому что длина вашего массива равна 1, поэтому индекс должен быть 0.

Я бы предложил вам вместо этого используйте ArrayList, потому что вы не знаете размер sMaze, и если одно из значений равно String, ваш элемент char в array не сможет его обработать.

String[] splitString = sMaze.split("\n");
List<String> array = new ArrayList<>();

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

Но в зависимости от того, что вы хотите сделать, вы можете использовать и ArrayList из Char.

...