我有一个小问题。我将稀疏矩阵中的每个元素都放入一个名为'b []'的1d数组中。例如:
00070
00400
02000
00050
10000
成为:0007000400020000005010000
以下代码的作用是,在最内层循环中的给定点b []具有正确的值,如下所示。我的问题是在最内层循环b []之外的值为:
b[] = 0000000000000000000000000
我无法理解我所缺少的东西。还应注意,b []是全局定义的,并在此类的构造函数中实例化。问题是我试图在另一个函数中使用这个1d数组,并且数组中的每个元素都设置为0.
public void return1dSequence() {
// Create paired objects (Pair class).
for (int i = 0; i < a.length; i++) {
for(int j = 0; j < a[i].length; j++) {
this.b[i] = a[i][j];
// System.out.print(b[i]);
if (this.b[i] == 0) {
pos += 1;
} else {
value = this.b[i];
ml.add(new Pair(pos, value));
pos += 1;
}
}
}
}
提前感谢您的回复,
安德烈。
答案 0 :(得分:0)
我想提到的第一件事是你不应该声明你的变量(a,b ....)静态。在创建Sparse的两个实例后,你可能会受到平均副作用的影响。尝试将它们定义为非静态,并报告它是否仍然不起作用。
祝你好运 托马斯
答案 1 :(得分:0)
如果要将b []作为静态访问,请尝试从每次调用b []中删除它。
另外,你确定你没有在代码中的任何其他位置覆盖b []吗?由于公共静态声明,这很可能是问题。尝试将其设为私有并删除静态,并查看是否仍有问题。
答案 2 :(得分:0)
您正在填写外部循环索引i的b[i]
...
每次在内部循环中,您都会使用值b[i]
覆盖a[i][j]
。
a[i]
数组的最后一个值始终为零。
这就是你的b数组为零的原因。
你想要的可能是:
int counter = 0;
for (int i = 0; i < a.length; i++) {
for(int j = 0; j < a[i].length; j++) {
b[counter] = a[i][j];
counter++;
}
}