【发布时间】:2018-02-15 10:36:58
【问题描述】:
我正在尝试在 Java 中实现一个简单的矩阵乘法,我将矩阵存储在二维 ArrayLists 中。看起来错误是由嵌套 for 循环内的矩阵Result 的设置引起的,但我不明白为什么。
import java.util.ArrayList;
import java.util.Collections;
import java.util.Arrays;
public class Test {
public static void main(String args[]) {
int n = 2;
ArrayList<ArrayList<Integer>> Result =
new ArrayList<ArrayList<Integer>>(
Collections.nCopies(n, new ArrayList<Integer>(
Collections.nCopies(n, 0))));
ArrayList<ArrayList<Integer>> A = new ArrayList<ArrayList<Integer>>();
ArrayList<ArrayList<Integer>> B = new ArrayList<ArrayList<Integer>>();
A.add(new ArrayList<Integer>(Arrays.asList(1, 6)));
A.add(new ArrayList<Integer>(Arrays.asList(2, 2)));
B.add(new ArrayList<Integer>(Arrays.asList(0, 9)));
B.add(new ArrayList<Integer>(Arrays.asList(5, 6)));
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
for (int k = 0; k < n; k++) {
int val = A.get(i).get(k) * B.get(k).get(j);
Result.get(i).set(j, Result.get(i).get(j) + val);
}
}
}
}
}
代码产生结果:
A * B = [[40, 75], [40, 75]]
实际上应该是:
A * B = [[30, 45], [10, 30]]
【问题讨论】:
标签: java matrix arraylist matrix-multiplication