Как читать на игровом поле из текстового файла и конвертировать его в 2D массив - PullRequest
0 голосов
/ 20 марта 2020

Пример платы, с которой мне пришлось бы читать, выглядит примерно так:

Example Board in text file

Теперь «Тестовый файл» - это только название доски, и это не будет сохранено в массиве. Часть «3 3» определяет размеры платы, но также не будет считываться в массив. Единственные биты, которые мне нужно прочитать в массиве, - это символы под этими строками.

Это мой код:

public static void main(String[] args) throws IllegalStateException {

    int lineCount = 0;
    String[] rowN = null;

    try {

        Scanner boardInput = new Scanner(new File(args[0]));
        Scanner movesInput = new Scanner(new File(args[1]));

        col = boardInput.nextLine().split("").length; // counts the columns

        while (boardInput.hasNextLine()) { // iterates through board file

            rows++; // counts the rows

        }

        rows -= 2;
        String line = boardInput.nextLine();
        while(boardInput.hasNextLine()){

            if (lineCount > 1){

                 rowN = line.split("");
                 boardArray[lineCount-2] = rowN;
                 line = boardInput.nextLine();
                 lineCount++;


            }



        }

        System.out.println(Arrays.deepToString(boardArray));


        //playGame();

        boardInput.close();
        movesInput.close();

    } catch (Exception e) {

        e.printStackTrace();

    }

}

Я чувствую, что это полезно, только если я объясню причину моей попытки , Сначала мне удалось найти столбцы no.columns просто прочитав одну из строк и получив ее длину. Во-вторых, мне удалось найти количество строк, просматривая файл и подсчитывая количество строк, а затем вычитая 2, чтобы учесть предыдущие нежелательные строки. С этим я получаю размеры моего массива; строки и столбец.

Следующая часть мне показалась более хитрой. Я снова просмотрел файл и проверил, больше ли переменная lineCount, чем 1 (для учета предыдущих строк). Если это так, то обозначенный массив rowN равен различным символам первой строки символов, которые мы хотим. После этого я застрял и некоторое время пытался решить эту проблему. Спасибо за ваше время!

1 Ответ

0 голосов
/ 20 марта 2020

Я не понимаю, почему вы пытаетесь получить размер платы по размерам текстовых файлов, если вы можете прямо прочитать его из указанного файла. И то, как вы сейчас пытаетесь это сделать, мне кажется, что в нем есть некоторые ошибки:

col = boardInput.nextLine().split("").length;

Это даст вам, если вы посмотрите на тестовый файл с 9 столбцами, потому что первая строка в вашем тестовом файле: " Тестовый файл »содержит 9 символов, но ширина доски составляет всего 3.

Определение строки, как вы делаете сейчас, также вызовет проблемы, потому что boardInput.hasNextLine() не изменится, пока вы на самом деле не перейдете на следующую строку, используя boardInput.nextLine(), так что у вас, по сути, есть бесконечность, тогда как l oop там.

Исправить это на самом деле довольно просто, поскольку файл содержит информацию о столбце и строке:

String name = boardInput.nextLine(); // Store the name of the board so the next line can be processed.
String[] rowAndCol = boardInput.nextLine().split(" "); // Takes the second line and splits it into its two parts.
// Parse the two Strings to integers(Assuming the first number is the row and the second is the column):
int row = Integer.parseInt(rowAndCol[0]);
int col = Integer.parseInt(rowAndCol[1]);

Теперь с что пришло время решить проблему, о которой вы на самом деле спрашивали. Прежде всего вам нужно создать двумерный массив, представляющий вашу доску, а затем заполнить его символами в каждой строке. Заполнить массив на самом деле довольно легко, потому что вы можете преобразовать строку в массив символов с помощью одного вызова функции:

char[][] board = new char[row][];
for(int r = 0; r < row; r++) {
    board[r] = boardInput.nextLine().toCharArray();
}

Интересно отметить, что вам даже не нужно знать число столбцов для создания правильного массива (при условии, что файл правильно отформатирован).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...