以NaN形式返回的平均值和标准差方法

时间:2013-12-08 22:58:47

标签: java arrays methods

我正在制作一个程序,它可以获得数组中的数字的平均值和标准偏差。我只坚持一件事:每当返回平均值和标准偏差时,它都会显示为非数字。代码有什么问题?

以下是方法:

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


    }
}

1 个答案:

答案 0 :(得分:1)

问题在于使用此类声明进行划分:return (sum/numElem);其中numElm初始化为0sum也是0,因为以下内容永远不会被执行:

for(int i=0;i<numElem;i++){ //<---- numElem = 0
        sum = sum + gradeArray[i];
    }

NaN值用于表示某些无效操作(例如除法)的结果 零到零。 float和double类型的NaN常量预定义为 Float.NaNDouble.NaN

初始化或将此numElem设置为其他值。