【问题标题】:Average and standard deviation methods returning as NaN返回为 NaN 的平均和标准偏差方法
【发布时间】:2013-12-09 07:02:03
【问题描述】:

我正在编写一个程序来获取数组中估算的数字的平均值和标准差。不过,我只坚持一件事:每当返回平均值和标准偏差时,它都会显示为 Not a Number。代码有什么问题?

方法如下:

    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。

标签: java arrays methods


【解决方案1】:

问题在于使用这样的语句进行除法:return (sum/numElem); 其中numElm 被初始化为0sum 也是0,因为以下语句永远不会被执行:

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

NaN 值用于表示某些无效操作的结果,例如除法 零乘零。浮点型和双精度型的 NaN 常量预定义为 Float.NaNDouble.NaN

所以初始化或设置这个numElem 为其他值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-27
    • 2020-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    • 1970-01-01
    相关资源
    最近更新 更多