java - 如何使用文件输入创建二维数组

标签 java arrays file matrix input

我的任务是使用文件输入执行矩阵乘法。乘法过程的实际数学计算没有问题;将数据存储到二维数组中让我感到困惑。

这是我必须用来创建二维数组的数据文件:

matrix
row
1
2
-2
0
row
-3
4
7
2
row
6
0
3
1
matrix
row
-1
3
row
0
9
row
1
-11
row
4
-5

规则非常简单:新矩阵的开始将用“matrix”表示,新行的开始将用“row”表示,后跟分配给该行每列的数字。

对于上下文,这是我的矩阵乘法方法:

static int[][] mult(int[][] a, int[][] b) {

    int aRow = a.length;
    int aCol = a[0].length;

    int bRow = b.length;
    int bCol = b[0].length;

    if (bRow != aCol) {
        throw new IllegalArgumentException("Matrix A is not multipliable by Matrix B");
    }

    int[][] product = new int[aRow][bCol];

    for (int i = 0; i < product.length; i++) {
        for (int j = 0; j < product[i].length; j++) {
            for (int k = 0; k < aCol; k++) {
                product[i][j] += a[i][k] * b[k][j];
            }
        }
    }
    return product;
}

这是具有主要方法的类,我尝试将上述文本文件中的数据存储到二维数组中(尝试将第一个矩阵存储到名为“a”的二维数组中,将第二个矩阵存储到名为“b”的二维数组):

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

    Scanner scanner = new Scanner(new File("/Users/Krish/IdeaProjects/Lessons/src/Lesson34/MatrixData.txt"));
    String text[] = new String[100];
    int index = -1;

    while (scanner.hasNext()) {
        text[++index] = scanner.nextLine();
    }


    int[][] a = {{}};
    int[][] b = {{}};
    int[][] product = MatrixMult.mult(a, b);

    for (int i = 0; i < product.length; i++) {
        for (int j = 0; j < product[i].length; j++) {
            System.out.print(product[i][j] + "\t");
        }
        System.out.println();
    }

    scanner.close();

}

我知道我必须做如下的事情,但老实说,我不知道该怎么做,并且非常感谢一些帮助/指导:

for (int i = 0; i <= index; i++) {

        Scanner line = new Scanner(text[i]);
        int n = 0;

        while (line.hasNextInt()) {
            n = line.nextInt();
            for (int j = 0; j < a.length; j++) {
                for (int k = 0; k < a[j].length; k++) {
                    a[j][k] = n;
                }
            }
        }
}

最佳答案

我建议您使用Java Collections代替数组并以这种方式读取矩阵。 例如,您从输入流中读取“matrix”值并调用此方法:

private int[][] readMatrix(final BufferedReader reader) {
    List<List<Integer>> matrix = new ArrayList<>();
    int rowNumber = -1;
    while(reader.hasNext()) {
        String value = reader.readLine();
        if ("row".equals(value)) {
            ++rowNumber;
            matrix.add(new ArrayList<Integer>());
        } else {
            int intValue = Integer.parseInt(value);
            matrix.get(rowNumber).add(intValue);
        }
    }

    // convert to an array
    int[][] array = new int[matrix.size()][];
    for (int i = 0; i < matrix.size(); ++i) {
        List<Integer> row = matrix.get(i);
        array[i] = row.toArray(new int[row.size()]);
    }
    return array;
}

关于java - 如何使用文件输入创建二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52793804/

相关文章:

java - 完成包含逗号和点分隔整数的字符串

java - 在 Java 中,定义数组是为引用分配空间还是为对象本身分配空间?

python - 为什么在我停止程序之前不会写入文件?

arrays - 将动态数组类型分配给 TArray<T> 变量

java - 创建一个数组,其中每个值都是枚举?

c# - 在文本文件中搜索字符串及其上一句和下一句

python - selenium 脚本抛出无效参数错误

带连字符的 Java 正则表达式

java - SimpleAsyncTaskExecutor 尝试在处理完成后读取记录

java - 当作为查询参数给出更多字符时,REST API 没有响应