0

私は計算でいっぱいのテーブルを持っています。各行には、個人の債務に基づく数値が含まれています。例えば:

行1:債務1(名前)、7.9(APR)、1000(残高)、20(MinPayment);

行2:債務2(名前)、9.9(APR)、2000(残高)、40(MinPayment);

等..

このテストには6つの行があります。いくつかの配列でいくつかのループを実行していますが、上記のエラー(タイトル)が発生しました。

05-17 18:31:47.548:E / AndroidRuntime(2019):原因:java.lang.ArrayIndexOutOfBoundsException:length = 6; index = 6

長さが6なので、どちらが奇妙ですか?

メソッド全体は次のとおりです。

 public int payoffDebt(Double totalDebt) {
    Cursor c = database.rawQuery("SELECT *  FROM debt;", null);
    int monthTotal = 0; 
    double interestFee = 0;
    double interestFeeTotal = 0;

    String indBal[] = new String[c.getCount()];
    String indPay[] = new String[c.getCount()];
    String indApr[]  = new String[c.getCount()];
    double totalBal[]  = new double[c.getCount()];
    double totalInterestFees[]  = new double[c.getCount()];
    int rowCounter[] = new int[c.getCount()];

    int j = 0; int k = 0;   
    for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
        // get individual Bal, APR percent, Payment, store into three arrays;
        indBal[k++]  = c.getString(c.getColumnIndex("debt_total"));
        indPay[k++] = c.getString(c.getColumnIndex("payment"));
        indApr[k++] = c.getString(c.getColumnIndex("apr"));
        rowCounter[k++] = k;
    }
    c.close();

    while (totalDebt >= 0) {

        for (int i : rowCounter) {
            interestFee = (((Double.valueOf(indApr[i]) / 100) / 12) * Double
                    .valueOf(indBal[i]));
            totalDebt = totalDebt
                    - (Double.valueOf(indPay[i]) - interestFee);
            interestFeeTotal += interestFee; // sum of all Apr Fees CURRENT
                                                // month in while loop
        }

        totalBal[j++] = totalDebt; // record total debt for this after all
                                    // payments
        totalInterestFees[j++] = interestFeeTotal; // record total interest
                                                    // fees for this month
                                                      // from all debt

        // Increment month
        monthTotal += 1;

    }
    return monthTotal;

問題は165行目でした:

indApr[k++] = c.getString(c.getColumnIndex("apr"));
4

2 に答える 2

4

Java 配列は 1 ではなく 0 から始まります。つまり、配列の最初の要素には を使用してアクセスしarray[0]、2 番目array[1]の要素には などを使用してアクセスします。したがって、配列の最後の要素にアクセスするには、 を使用しますarray[array.length - 1]。Usingarray[array.length]は範囲外の 1 つのインデックスであるため、例外です。

于 2012-05-18T01:40:00.580 に答える
1

配列インデックスの問題を修正する方法について他の人が議論しましたが、おそらく根本的な原因は、非同期に保つ必要がある 5 つの個別の配列があることです。5 つのデータ項目を保持する新しいクラスを作成した場合:

public class Data{
    String indBal;
    String indPay;
    String indApr;
    double totalBal;
    double totalInterestFees;
}

そして、データの配列が1つあれば、ループインデックスを追跡しやすくなります。

于 2012-05-18T01:41:00.327 に答える