java - 如何在不获取 java.lang.ArrayIndexOutOfBoundsException 的情况下将此伪代码转换为 Java
问题描述
我正在将伪代码转换为 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 是一种从零开始的语言:所有索引都从 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];
}
推荐阅读
- google-cloud-platform - GCP:通过 python 以编程方式列出积极使用的指标
- firebase - 是否可以在没有用户凭据的情况下删除 firebase 用户
- git - Git:撤消未提交更改的回滚
- google-optimize - Google 优化跟踪点击次数
- kubernetes - randomizer2.yaml 文件未部署
- node.js - SequelizeDatabaseError:“列“id”中的空值违反非空约束”
- android - UE4找不到gradle项目
- python - 如何使用 python 在不同分辨率的 csv 中重新网格化 lat long 数据
- python - Python Regex:如何在文本文件中找到重复出现的文本块
- python - 在python中通过指定时间运行脚本