需要帮助解决我的问题,我需要将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
非常感谢您的解决
答案 0 :(得分:3)
int heightofarray = (dataset.length)+(predictiondata.length)+(Means.length);
这应该是:
int heightofarray = (dataset.length)+(predictiondata.length)+(1);
平均值的高度为1
答案 1 :(得分:1)
学习一些调试技巧可能对您有所帮助,因此您可以在将来看到这些问题时解决这类问题。
为此,这是调试的一种方法:
查看输出,您可以看到正确存储了dataset
和predictiondata
。这是存储在错误位置的Means
。
存储for
的{{1}}循环与其他循环不同。前两个循环通过添加已填充的行数来计算Means
中的第一个可用行。但最后一个从最后倒数。那一定是问题所在。
toCalculate
的大小由
toCalculate
int heightofarray = (dataset.length)+(predictiondata.length)+(Means.length);
正好存储在正确位置之外的Means
行。那是因为Means.length - 1
被错误地计算为heightofarray
数组的 height 之和,dataset
数组的 height ,以及predictiondata
的 长度 。
正确的计算是
Means
希望有所帮助!