0

少し問題があります。疎行列のすべての要素を取得し、'b[]' という名前の 1 次元配列に入れています。例えば:

00070
00400
02000
00050
10000

なる:0007000400020000005010000

以下のコードは、最も内側のループ内の特定のポイントで b[] が以下に示すように正しい値を持つという点で機能します。私の問題は、最も内側のループ b[] の外側に次の値があることです。

b[] = 0000000000000000000000000

何が欠けているのか理解できません。b[] はグローバルに定義され、このクラスのコンストラクター内でインスタンス化されることにも注意してください。問題は、この 1 次元配列を別の関数で使用しようとしていて、配列内のすべての要素が 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 の 2 つのインスタンスを作成した後、平均的な副作用に見舞われたのかもしれません。それらを非静的として定義し、それでも機能しない場合は報告してください。

よろしくトーマス

于 2013-03-12T13:50:40.483 に答える
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 に答える
0

b[] に静的にアクセスしたい場合は、b[] への各呼び出しからこれを削除してみてください。

また、コード内の他の場所で b[] を上書きしていませんか? public static 宣言が原因である可能性が最も高い問題です。プライベートにして静的を削除してみて、まだ問題があるかどうかを確認してください。

于 2013-03-12T14:04:09.357 に答える