2012-03-15 221 views
0

需要幫助我的問題,我需要將3個數組合併成一個多維數組。但我總是遇到錯誤,其中一些值返回null。在第一陣列(字符串[] []數據集)中的數據是:組合2字符串[] []和1字符串[]變成一個字符串[] []

絃樂[] [] predictiondata
001200700001  70  70  70  55  70   
     001200700002  70  70  60  60  60   
     001200700003  85  85  85  60  85   
     001200700004  60  70  85  70  85   
     001200700005  70  60  60  60  85 

數據是:

15  74.25  64.25  64.25  64.25  89.25   
14  74.25  64.25  64.25  64.25  89.25 

和手段[]爲:

String[]Means={"Means","0","0","0","0","0"}; 

所以這裏是到目前爲止我的代碼和錯誤輸出:

public void hashtree(String[][]dataset, String[][]predictiondata){ 
     //======fetch data from database then add 1 morre row for calculation 

     String[]Means={"Means","0","0","0","0","0"}; 

     int heightofarray = (dataset.length)+(predictiondata.length)+(Means.length); 
     int lengthofarray=(dataset[0].length); 
     System.out.println("heightofarray: "+heightofarray+" lengthofarray: "+lengthofarray); 
     String[][]toCalculate = new String[heightofarray][lengthofarray]; 


     for(int a=0;a<dataset.length;a++){ 
      for(int b=0;b<dataset[0].length;b++){ 
       toCalculate[a][b]=dataset[a][b]; 
      } 
     } 
     for(int a=0;a<predictiondata.length;a++){ 
      for(int b=0;b<predictiondata[0].length;b++){ 
       toCalculate[(dataset.length)+a][b]=predictiondata[a][b]; 
      } 
     } 
     for(int a=0;a<Means.length;a++){ 
      toCalculate[heightofarray-1][a]=Means[a]; 
     } 


     System.out.println("should print String[][]toCalculate"); 
     for(int a=0;a<toCalculate.length;a++){ 
      for(int b=0;b<toCalculate[0].length;b++){ 
       System.out.print(toCalculate[a][b]+"\t"); 
      }System.out.println(""); 
     } 

用於新組合的陣列的順序(字符串[] [] toCalculate)是:

字符串[] []的數據集

字符串[] [] predictiondata

字符串[]意指

但是,無論我總是得到輸出

System.out.println("should print String[][]toCalculate"); 
    001200700001  70  70  70  55  70   
    001200700002  70  70  60  60  60   
    001200700003  85  85  85  60  85   
    001200700004  60  70  85  70  85   
    001200700005  70  60  60  60  85   
    15  74.25  64.25  64.25  64.25  89.25   
    14  74.25  64.25  64.25  64.25  89.25   
    null  null  null  null  null  null   
    null  null  null  null  null  null   
    null  null  null  null  null  null   
    Exception in thread "main" java.lang.NullPointerException 
    null  null  null  null  null  null   
    null  null  null  null  null  null   
    Means  0  0  0  0  0 

非常感謝您爲解決

回答

3
int heightofarray = (dataset.length)+(predictiondata.length)+(Means.length); 

這應該是:

int heightofarray = (dataset.length)+(predictiondata.length)+(1); 

機構的高度是1

+0

非常感謝你,它通過將Means的值改變爲這種計算方式起作用。 – charcoalite 2012-03-17 09:24:17

1

這將可能有助於您瞭解一些調試技術,這樣就可以解決這樣的問題,當你看到他們在未來。

爲此,這裏是去有關調試的一種方法:

望着輸出,你可以看到,datasetpredictiondata被正確地存儲。這是存儲在錯誤位置的Means

存儲Meansfor循環與其他循環不同。前兩個循環通過添加已經填充的行數來計算toCalculate中的第一個可用行。但最後一個從最後倒數。這一定是問題所在。

toCalculate大小由

int heightofarray = (dataset.length)+(predictiondata.length)+(Means.length); 

Means給出的確切存儲超出適當的位置Means.length - 1行。這是因爲heightofarray被錯誤地計算爲高度dataset陣列的的總和,所述predictiondata陣列的高度,並且長度Means的。

正確計算

int heightofarray = dataset.length + predictiondata.length + 1; 

希望幫助!

+0

非常感謝,它通過將Means的值改變爲這種計算方式起作用。 – charcoalite 2012-03-17 09:23:34