Я делаю программу, которая получает средние значения и стандартное отклонение чисел, вмененных в массив. Я застрял только в одном: когда возвращается среднее и стандартное отклонение, оно отображается как «Не число». Что не так с кодом?Средние и стандартные методы отклонения, возвращающиеся как 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);
А вот код события, когда «Enter Сорта» кнопка нажата на:
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. –