0

我正在尝试使用本文中解释的方法从我的数据库中获得的双精度列表中计算平均值,它不起作用。应用程序崩溃可能是因为溢出。

private double getAverage() {
        Cursor cursor = db.getMarks(subject);
        List<Double> list = new ArrayList<Double>();
        cursor.moveToFirst();
        while(!cursor.isAfterLast()) {
            list.add(cursor.getDouble(cursor.getColumnIndex(DBAdapter.KEY_VALUE)));
        }
        if (list.isEmpty())
            return 0.0;

        long sum = 0;
        int n = list.size();
        for (int i = 0; i < n; i++)
            sum += list.get(i);
        return ((double) sum) / n;
    }

有没有一种方法可以获得计算平均值的工作代码?提前致谢

4

1 回答 1

0

你得到什么异常?如果确实溢出,请这样尝试:

private double getAverage() {

    Cursor cursor = db.getMarks(subject);


    int count = cursor.getCount();
    double sum = 0.0;
    if(count == 0){
        cursor.close();
        return sum;
    }

    cursor.moveToFirst();
    while(!cursor.isAfterLast()) {
        sum += cursor.getDouble(cursor.getColumnIndex(DBAdapter.KEY_VALUE));
        cursor.moveToNext();
    }

    cursor.close();
    return sum / count;
}
于 2012-10-21T15:25:01.310 回答