0
我正在做一个程序,得到的平均值,并且在阵列推算数字的标准偏差。然而,我只会遇到一件事:每当返回平均值和标准偏差时,它就会显示为不是数字。代码有什么问题?平均值和标准偏差方法返回的NaN的
这里的方法:
public mainFrame() {
initComponents();
}
private double avg;
private double stdDeviation;
private double[] gradeArray;
/**
*
* @param gradeArray
* @param numElem
* @return
*/
public double getAverage (double[] gradeArray, int numElem) {
double sum = 0;
for(int i=0;i<numElem;i++){
sum = sum + gradeArray[i];
}
return (sum/numElem);
}
public double getStdDev (double[] gradeArray, int numElem, double avg){
double sum = 0;
for(int i = 0;i<numElem;i++){
sum = sum + Math.pow((gradeArray[i]-avg),2);
}
return Math.sqrt(sum/numElem);
这里是事件代码时“输入级别”按钮被点击:
final int SIZE = 25;
double[] gradeArray = new double[SIZE];
String s;
int numElem = 0;
double average = 0;
for(int i=0;i<=SIZE;i++){
s = (String)JOptionPane.showInputDialog("Enter Grade","");
if (s == null || s == ("")){
break;
}
else{
try{
gradeArray[i] = Double.parseDouble (s);
average = getAverage(gradeArray,numElem);
stdDeviation = getStdDev(gradeArray,numElem,avg);
txtGradeEntered.setText(1 + i + "");
txtMean.setText(average +"");
txtStdDev.setText(stdDeviation+"");
}
catch (NumberFormatException e){
JOptionPane.showMessageDialog(null, "Your input must be numeric!","Bad Data!",0);
}
catch (ArrayIndexOutOfBoundsException e){
JOptionPane.showMessageDialog (null, "You can only input 25 values!","Too much data!",0);
}
}
}
您是否尝试过使用调试器? –
'numElem'从0开始。因此在'getAverage'中,你除以0。 –