繁体   English   中英

有没有办法在不使用函数的情况下在文件中写入二维矩阵?

[英]Is there any way to write 2d matrix in file without using functions?

我想在 Java 中编写 10 个 2d 矩阵(它们是数独),但我只想将它们写入文件(手动),而不首先将它们包含在我的代码中,并在函数中使用它们来编写和读取它们从文件。 我希望你能理解我想说的话。

您可以按如下方式定义数独板

    int[][] sudoku = {
        {4, 2, 9,   8, 1, 3,   5, 6, 7},
        {5, 1, 6,   4, 7, 2,   9, 3, 8},
        {7, 8, 3,   6, 5, 9,   2, 4, 1},

        {6, 7, 2,   1, 3, 4,   8, 5, 9},
        {3, 9, 5,   2, 8, 6,   1, 7, 4},
        {8, 4, 1,   7, 9, 5,   6, 2, 3},

        {1, 5, 8,   3, 6, 7,   4, 9, 2},
        {9, 3, 4,   5, 2, 8,   7, 1, 6},
        {2, 6, 7,   9, 4, 1,   3, 8, 5},
    };

您可以创建一个多维数组并使用 JSON 将其保存到文件中

{
  "sudoku": [
    [], [],
    [], [],
    [], [],
    [], [],
    [], [],
    [], [],
    [], []
  ]
}

如何创建一个二维数组

int[][] twoD_arr = new int[3][2];

我认为以下将做你想要的:

    public static void main(String[] args) {
        try {
            int[][] grid1 = loadGrid(9, 9, "grid_1.txt");
            printGrid(grid1);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static int[][] loadGrid(int width, int height, String filename) throws IOException {
        int[][] res = new int[width][height];
        int y = 0;
        for (String line : Files.readAllLines(Paths.get(filename))) {
            int x = 0;
            for (String n : line.split("\\s+"))
                res[y][x++] = Integer.parseInt(n);
            ++y;
        }
        return res;
    }

    private static void printGrid(int[][] grid) {
        for (int[] row : grid) {
            for (int n : row)
                System.out.print(n + "  ");
            System.out.println();
        }
    }

重要的一点是在loadGrid 它使用readAllLines从文本文件中获取行列表,然后在每行内将其拆分为正则表达式\\s+ ,这意味着“任意数量的空格”。 这会产生一堆单独的字符串,您可以将它们转换回数字。

输入文件只是:

1  2  3    4  5  6    7  8  9
10 11 12   13 14 15   16 17 18
19 20 21   22 23 24   25 .... etc

请注意,这不能容忍源文件中的错误。 您将需要处理大小错误的文件、包含非数字文本的文件等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM