如何从文件中读取数组

时间:2016-05-14 00:00:59

标签: java arrays matrix

我试图从文件创建矩阵,文件是这样的: 我的第一行的矩阵大小= 10 x 9 而在其他方面,我们有15个值随意分配。

3 5
4 5 6
12 34 12 12 8
34 23
12 34 34 10 89

使用信息大小我将定义我的matriz。我使用这种方法进行阅读:

public static void read(){
    String line= "";
    int i = 0;
    try {
        while((line = bf.readLine()) != null){
            if (i == 0){
                //Call method that get the size and create my global matriz
            }else{
                String[] list = line.split(" ");
                //I need help here, for insert correctly in the array 
            }
         i++;
        }
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

如何在矩阵中有序插入?我的矩阵应该是:

    4   5   6   12  34 
    12  12  8   34  23
    12  34  34  10  89

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

这是一种方法:

String input = "3 5\n" +
               "4 5 6\n" +
               "12 34 12 12 8\n" +
               "34 23\n" +
               "12 34 34 10 89\n";
Scanner in = new Scanner(input);
final int rows = in.nextInt();
final int cols = in.nextInt();
int[][] matrix = new int[rows][cols];
int row = 0, col = 0;
for (int i = 0; i < rows * cols; i++) {
    matrix[row][col] = in.nextInt();
    if (++col == cols) {
        row++;
        col = 0;
    }
}
System.out.println(Arrays.deepToString(matrix));

输出:

[[4, 5, 6, 12, 34], [12, 12, 8, 34, 23], [12, 34, 34, 10, 89]]

这不一定是最好的方法,但我希望显示colrow的手动增量逻辑,其中rowcol时递增翻身。

使用answer by sebenalern,它的工作方式如下:

int[][] matrix = new int[rows][cols];
for (int row = 0; row < rows; row++)
    for (int col = 0; col < cols; col++)
        matrix[row][col] = in.nextInt();

使用answer by Paul,它的工作方式如下:

int[][] matrix = new int[rows][cols];
for (int i = 0; i < rows * cols; i++)
    matrix[i / 5][i % 5] = in.nextInt();

所有3个版本都依赖Scanner来简单地提供序列中的所有值,无论它们是如何组合在一起的。

如果您不想使用Scanner(例如因为它很慢),并逐行读取输入,那么第一个版本的线将更容易使用。否则第3个是最短的,第2个版本是最直接的。

答案 1 :(得分:0)

只是一个提示 - 我会把你的作业留给你 - :
在这种情况下,维护到目前为止已读取的所有值的计数器非常简单,并将这些计数器值中的每一个映射到如下的矩阵值:

0 = (0 , 0)
1 = (1 , 0)
...
5 = (0 , 1)
6 = (1 , 1)
...

使用类似的东西:

int row = counter / rowLength;
int col = counter % rowLength;

在你的情况下:

matrix[counter/5][counter%5] = someValue;