0

この投稿で説明されている方法を使用して、データベースから取得したdoubleのリストから平均値を計算しようとしていますが、機能しません。おそらくオーバーフローが原因でアプリがクラッシュします。

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 に答える