如何在不获取 java.lang.ArrayIndexOutOfBoundsException 的情况下将此伪代码转换为 Java

How to convert this pseudo code to Java without get a java.lang.ArrayIndexOutOfBoundsException

我正在将伪代码转换为 Java 以回答“输入数组 [2, 3, 5, 7] 时算法 foo 输出什么”的问题。 到目前为止,我在 Java 中尝试了一个代码,它给我一个 java.lang.ArrayIndexOutOfBoundsException 错误。如果我将伪代码准确转换为 Java.

,我不明白有什么问题

这是伪代码:

1: x := 0;
2: for i := 1 to n do
3: x := x + A[i];
4: end for
5: if x < 2 then
6: return f alse;
7: end if
8: for i := 2 to x − 1 do
9: if x mod i = 0 then
10: return f alse;
11: end if
12: end for
13: return true;

这是我写的代码:

public class foo {

static int[] A = new int[] { 2, 3, 5, 7 };
static int x = 0;

public static void main(String[] args) {
    System.out.println();
    bb();
}

private static boolean bb() {
    for (int i = 1; i <= A.length; i++) {
        x = x + A[i];
    }

    if (x < 2) {
        return false;
    }

    for (int i = 2; i <= x - 1; i++) {
        if ((x % i) == 0) {
            return false;
        }
    }

    return true;

}

}

使用代码我得到错误

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
at foo.bb(foo.java:14)
at foo.main(foo.java:9)

我知道 java.lang.ArrayIndexOutOfBoundsException 发生在我们试图访问一个数组的元素时,其索引为负数或大于数组本身的大小。 但是我没有看到我在哪里失败将伪代码转换为 Java 以获得此错误。我必须将给定的伪代码准确地转换为 Java.

谢谢

Java 是一种 zero-based 语言:所有索引从 0 开始到长度 - 1 结束。

变化:

for (int i = 1; i <= A.length; i++) {
    x = x + A[i];
}

收件人:

for (int i = 0; i < A.length; i++) {
    x = x + A[i];
}