2013-03-12 91 views
0

我有一個小問題。我將稀疏矩陣中的每個元素都放入一個名爲'b []'的1d數組中。例如:全球Java陣列設置值爲0

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; 
      } 
     } 
    } 
} 

預先感謝任何答覆,

安德烈。

+0

問題是最有可能在你的代碼還沒有表現出... – assylias 2013-03-12 13:35:46

+1

您可以共享實例並初始化B []的代碼? – Farlan 2013-03-12 13:35:59

+1

這個b []變量是如何聲明的?你能告訴我們整個程序,或者至少是所有相關的代碼嗎?另外,它是如何執行的? – 2013-03-12 13:36:51

回答

0

你在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++; 
    } 
} 
0

我想提到的第一件事是你不應該聲明你的變量(a,b ....)static。也許你在創建兩個稀疏實例之後受到了平均副作用的打擊。嘗試將它們定義爲非靜態,並報告它是否仍然不工作。

問候 托馬斯

+0

是托馬斯,即使當定義爲非靜態的,它仍然丟失它的內容。 Regards, Andre – drizzy 2013-03-12 13:57:09

0

嘗試從每個調用中刪除這對B []如果你想訪問B []作爲靜態的。

此外,你確定你不覆蓋b []代碼中的任何其他地方?由於公共靜態聲明,這很可能是問題。嘗試將其設爲私人並刪除靜態內容,看看您是否仍然存在此問題。