0

我有一个小问题。我将稀疏矩阵中的每个元素放入一个名为“b []”的一维数组中。例如:

00070
00400
02000
00050
10000

变成:0007000400020000005010000

下面的代码在最内层循环中的给定点处起作用 b[] 具有正确的值,如下所示。我的问题是在最内层循环之外 b[] 的值为:

b[] = 0000000000000000000000000

我无法理解我错过了什么。还应注意 b[] 是全局定义的,并在此类的构造函数中实例化。问题是我试图在另一个函数中使用这个一维数组,并且数组中的每个元素都设置为 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;
            }
        }
    }
}

提前感谢您的任何回复,

安德烈。

4

3 回答 3

0

我要提到的第一件事是你不应该将你的变量(a,b....)声明为静态的。在创建两个 Sparse 实例后,您可能会受到平均副作用的影响。尝试将它们定义为非静态并报告它是否仍然无法工作。

最好的问候托马斯

于 2013-03-12T13:50:40.483 回答
0

如果您想将 b[] 作为静态访问,请尝试从对 b[] 的每次调用中删除它。

另外,您确定没有在代码中的其他任何地方覆盖 b[] 吗?由于公共静态声明,这很可能是问题所在。尝试将其设为私有并删除静态,看看是否仍有问题。

于 2013-03-12T14:04:09.357 回答
0

您正在填写b[i]外部循环的索引 i ...

每次在内循环中,您都b[i]用 value覆盖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++;
    }
}
于 2013-03-12T14:59:07.147 回答