превращение массива строк в двумерный массив символов - PullRequest
0 голосов
/ 15 февраля 2019

мой код читает входные данные из файла, внутри которого написан лабиринт, внутри файла выглядит так.7 7 GOOOOXO XXOXOOX OXOOOXX XXXOOXO XXXXOXX SOOOOOX XXXXXXX (каждый из них на отдельной строке, не уверен, как показать это здесь)

числа - это измерения, а G - это цель S, начало, это не имеет значениятеперь.Я прочитал файл в массив строк за строкой.Таким образом, мой массив выглядит следующим образом {"GOOOOXO", ..., "XXXXXXX"}, теперь я хочу преобразовать строки в двумерный массив символов, где символы хранятся так же, как лабиринт отображается выше.

Первый вложенный цикл for просто читает входные файлы и сохраняет каждую строку в виде строки в массиве, второй массив предназначен для преобразования строк в символы, чтобы сохранить их в массив 2d и при этом сохранить формулабиринт.Я получаю индекс массива за пределами исключения.Но, если честно с тобой после нескольких часов застревания, мой мозг зажжен, я не могу понять свою проблему.

    int dimensionsX = input.nextInt();
    int dimensionsY = input.nextInt();
    String[] lines = new String[dimensionsY];
    char[][] maze2 = new char[dimensionsX][dimensionsY];

    for (int j = 0; j < dimensionsY; ++j) {
        if (input.hasNextLine()) {
            lines[j] = input.nextLine();
            System.out.println(lines[j]);
            //System.out.println(j);
        }

    }



    for (int i = dimensionsX; i > 0; --i) {
        for (int j = dimensionsY; j > 0; --i) {
            maze2[i][j] = lines[i].charAt(j);
            System.out.print(maze2[i][j]);
            if (i == lines.length) {
                System.out.println();
            }
        }
    }

1 Ответ

0 голосов
/ 15 февраля 2019

Например:

int dimensionsX = input.nextInt();
int dimensionsY = input.nextInt();
String[] lines = new String[dimensionsY];
char[][] maze2 = new char[dimensionsY][];

for (int j = 0; j < dimensionsY; ++j) {
    if (input.hasNextLine()) {
        lines[j] = input.nextLine();
        if(lines[j].length()<dimensionsX){
           System.err.println("we are doomed. Input malformed in line j: it has less then" + dimensionsX + "characters");
           System.exit(1);     
        }
        maze2[j] = lines[j].toCharArray();
        System.out.println(lines[j]);
        //System.out.println(j);
    }else{ 
       System.err.println("we are doomed. Input has too few lines");
       System.exit(1);
    }
}
//taken as is, but makes me wonder if it is intended to have dimensionsX as the Y coordinate but well...
for (int i = dimensionsX; i > 0; --i) {
    for (int j = dimensionsY; j > 0; --j) {
        System.out.print(maze2[j-1][i-1]);
    } 
    System.out.println();
}

Конечно, вы хотите сделать что-то иное, чем выход из программы, если ввод искажен, например, выдать исключение или вообще ничего не делать, если ваш ввод всегда правильный (хорошоэто так?).

...