2012-03-15 171 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