java - 返回方法时出现 ArrayExceptionOutOfBounds

标签 java arrays debugging error-handling

我正在尝试创建一个 fillArray 方法,该方法用 20 个随机值填充数组,并对每三个值求和。我在第 21 行(也就是调用该方法时)收到 ArrayExceptionOutOfBounds。通过调试,我看到数组填充了正确的值,并且正确计算了总和。我想知道错误是什么。

public static void fillArray(){
    //adding up A[0], A[3], A[6}, ...

    double[] A = new double[20];
    for(int i = 0; i < A.length; i++)
        A[i] = Math.random();

    double sum = 0;
    int k = 0;
    do{
        k += 3;
        sum += A[k];
    }while(k < 20);

    System.out.println("sum = " + sum);
}

我再次希望确定错误的原因,而不一定是修复它的方法。

最佳答案

这是您的问题:

do{
    k += 3;
    sum += A[k];
}while(k < 20);

K 将等于 0,然后是 3,然后是 6,等等,直到达到 21,然后您尝试访问超出范围的 A[21]。

这是因为当 while 循环第 6 次迭代时 k = 18 时,(k < 20)为 true,因此 while 循环继续,并向 k 添加另一个 3,使其等于 21。之后,while 循环停止,因为 k 不再小于 20,k 的值为 21。

关于java - 返回方法时出现 ArrayExceptionOutOfBounds,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29177257/

相关文章:

c - 动态分配链表数组

java - 使用 Gson 在 Java 中对 HashMap<Int,Object> 进行序列化/反序列化

java - 如何将数字从左到右放在一列中?

java - 提前引用变量?

java - 使用 Java FontMetrics 确定大致文本尺寸

mysql - 将数组存储到php中的变量中

c - 使用带有答案的指针在 C 中创建动态数组

performance - MSVC 2013 生成的调试代码太慢而无用

javascript - 设置断点和调试 eval 的 JavaScript

java - 如何使用 org.netbeans.swing.outline?