我正在制作一个程序,它可以获得数组中的数字的平均值和标准偏差。我只坚持一件事:每当返回平均值和标准偏差时,它都会显示为非数字。代码有什么问题?
以下是方法:
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);
}
}
}
答案 0 :(得分:1)
问题在于使用此类声明进行划分:return (sum/numElem);
其中numElm
初始化为0
而sum
也是0
,因为以下内容永远不会被执行:
for(int i=0;i<numElem;i++){ //<---- numElem = 0
sum = sum + gradeArray[i];
}
NaN
值用于表示某些无效操作(例如除法)的结果
零到零。 float和double类型的NaN常量预定义为
Float.NaN
和Double.NaN
。
初始化或将此numElem
设置为其他值。