全局Java数组设置值为0

时间:2013-03-12 13:33:24

标签: java global-variables nested-loops sparse-matrix

我有一个小问题。我将稀疏矩阵中的每个元素都放入一个名为'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;
            }
        }
    }
}

提前感谢您的回复,

安德烈。

3 个答案:

答案 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++;
    }
}