组合2 String [] []和1 String []时的错误变为一个String [] []

时间:2012-03-15 15:24:31

标签: java arrays

需要帮助解决我的问题,我需要将3个数组合并到一个多维数组中。但我总是遇到一些值返回null的错误。第一个数组(String [] []数据集)中的数据是:

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  

String [] [] predictiondata的数据是:

 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("");
        }

新组合数组(String [] [] toCalculate)的顺序为:

String [] [] dataset

的字符串[] [] 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   

非常感谢您的解决

2 个答案:

答案 0 :(得分:3)

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

这应该是:

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

平均值的高度为1

答案 1 :(得分:1)

学习一些调试技巧可能对您有所帮助,因此您可以在将来看到这些问题时解决这类问题。

为此,这是调试的一种方法:

查看输出,您可以看到正确存储了datasetpredictiondata。这是存储在错误位置的Means

存储for的{​​{1}}循环与其他循环不同。前两个循环通过添加已填充的行数来计算Means中的第一个可用行。但最后一个从最后倒数。那一定是问题所在。

toCalculate的大小由

给出
toCalculate

int heightofarray = (dataset.length)+(predictiondata.length)+(Means.length); 正好存储在正确位置之外的Means行。那是因为Means.length - 1被错误地计算为heightofarray数组的 height 之和,dataset数组的 height ,以及predictiondata 长度

正确的计算是

Means

希望有所帮助!