1

これが私が持っている方法です:

 public double getCombinedAprThisMonth() {
    Cursor c = database.rawQuery("SELECT *  FROM debt;", null);
    double totalMonthlyFee = 0;
    double SingleAprRate = 0;
    double[] storeFees;
    int rows = c.getCount();
    storeFees = new double[c.getCount()];

    for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
        for (int i = 0; i < rows; i++) {
            String BalColumn = c.getString(c
                    .getColumnIndex("debt_total"));
            String AprColumn = c.getString(c.getColumnIndex("apr"));
            double aprColumn = Double.valueOf(BalColumn);
            double balColumn = Double.valueOf(AprColumn);

            SingleAprRate = (((aprColumn / 100) / 12) * balColumn);
            storeFees[i++] = SingleAprRate; 

        }

    }
    for(double i : storeFees) {
        totalMonthlyFee += i;
    }

    c.close();
    return totalMonthlyFee;
}

3 つのレコードがあるため、3 つのループが発生するはずです。totalMonthlyFee は 90 として返されます。ただし、データは 8.33、45、および 45 です。その合計を取得しようとしています (98.33 は正しいはずですが、90 になっていますか?)。ここで何をしているかわかりますか?

4

2 に答える 2

1

あなたが何をしているのかを理解していれば、考え直してみると、内側のループはまったく必要ないと思います。多分これを試してみてください...

int j = 0;
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
        String BalColumn = c.getString(c
                .getColumnIndex("debt_total"));
        String AprColumn = c.getString(c.getColumnIndex("apr"));
        double aprColumn = Double.valueOf(BalColumn);
        double balColumn = Double.valueOf(AprColumn);

        SingleAprRate = (((aprColumn / 100) / 12) * balColumn);
        storeFees[j++] = SingleAprRate; 

    }
于 2012-05-17T03:39:12.073 に答える
0

ループの一部として既にインクリメントしている間は、ループ本体で i をインクリメントしないでください。

于 2012-05-17T03:46:59.367 に答える