Чтение данных из файла в 2d массив - PullRequest
0 голосов
/ 18 мая 2019

Мне нужно прочитать файл с магическим квадратом в формате: #

 # # #
 # # #
 # # #

где первая строка представляет размер квадрата и создает двумерный массив со значениями файла.

Я настроил свой метод readMatrix для чтения по строкам, создал двумерный массив правильного размера и ввел каждое значение в правильную позицию.

private int[][] readMatrix(String fileName) throws    
FileNotFoundException {
    int n;
    File file = new File(fileName);
    Scanner fileScan = new Scanner(file);
    String line = fileScan.nextLine();
    Scanner lineScan = new Scanner(line);
    n = lineScan.nextInt();
    square = new int[n][n];
    while (fileScan.hasNextLine()) {
        line = fileScan.nextLine();
        while (lineScan.hasNext()) {
            for (int i = 0; i < n; i++) {
                lineScan = new Scanner(line);
                for (int j = 0; j < n; j++) {
                    square[i][j] = lineScan.nextInt();
                }
            }
        }
    }
    fileScan.close();
    lineScan.close();
    return square;

public int[][] getMatrix() {

    int[][] copy;
    int n = square.length;
    copy = new int[n][n];
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            copy[i][j] = square[i][j];
        }
    }
    return copy;

Однако тестер для этой программы отображает магический квадрат правильных размеров, но со всеми значениями, равными 0, и не работает метод getMatrix (я предполагаю, потому что возвращенный квадрат не соответствует квадрату файла). Я попытался переместить объекты сканера вокруг (внутри / снаружи) циклов for / while в readMatrix и попытался использовать parseInt / scan next вместо nextInt, но безуспешно. Я в тупике.

1 Ответ

0 голосов
/ 18 мая 2019

Попробуйте этот код может отображать 1 - 9 из матрицы 3 х 3. Тип переменной можно изменить в соответствии с вашими потребностями. Я использовал «char» для простоты.

private static char[][] finalmatrix;

public static void main(String[] args) throws Exception {
    finalmatrix = readMatrix("File.txt");
    // Output matrix.
    for (int i = 0; i < finalmatrix.length ;i++) {
        for (int j = 0; j < finalmatrix[i].length ;j++) {
            System.out.print(finalmatrix[i][j] + " ");
        }
        System.out.println("");
    }
}

private static char[][] readMatrix(String fileName) throws IOException {
    File file = new File(fileName);
    Scanner scan = new Scanner(file);
    int countRow = 0;
    int countColumn = 0;
    List temp = new ArrayList();
    while (scan.hasNextLine()) {
        String line = scan.nextLine();
        for (int i = 0; i < line.length(); i++) {
            // Count the number of columns for the first line ONLY.
            if (countRow < 1 && line.charAt(i) != ' ') {
                countColumn++;
            }
            // Add to temporary list.
            if (line.charAt(i) != ' ') {
                temp.add(line.charAt(i));
            }
        }
        // Count rows.
        countRow++;
    }
    char[][] matrix = new char[countRow][countColumn];
    // Add the items in temporary list to matrix.
    int count = 0;
    for (int i = 0; i < matrix.length ;i++) {
        for (int j = 0; j < matrix[i].length ;j++) {
            matrix[i][j] = (char) temp.get(count);
            count++;
        }
    }
    scan.close();
    return matrix;
}
...