首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >for循环(java.lang.ArrayIndexOutOfBoundsException)中阵列元素的减法

for循环(java.lang.ArrayIndexOutOfBoundsException)中阵列元素的减法
EN

Stack Overflow用户
提问于 2020-04-29 22:34:24
回答 1查看 474关注 0票数 0

我需要减去:

(2-0)和(4-2)。

我需要这个找出丢失了多少个号码。我只是第一次学习编码,从逻辑上讲,这在我看来是正确的。

只要"n“小于”(statuesstatues.ength-1)“(即"4”),代码就会减去,所以它应该停在"2“处。所以我不明白为什么我会得到这个错误:

java.lang.ArrayIndexOutOfBoundsException:索引3超出长度3的界限

实际上,如果我打印"c“,我可以看到正确的结果,但很明显,它一直在计算,因为错误行就是"c”行。

我已经将代码更改为不同的版本,它起了作用,但取决于数组中的数字,有些地方出了问题。

公共类MakeArrayConsecutive2 {

代码语言:javascript
复制
public static void main(String[] args) {
    int[] statues = {0, 2, 4};
    makeArrayConsecutive2(statues);

}

public static int makeArrayConsecutive2(int[] statues) {    
    Arrays.sort(statues);
    int count = 0;
    for (int n = statues[0]; n < statues[statues.length-1]; n++) {
            int c = statues[n + 1] - statues[n];
            System.out.println(c);
            if (c != 1) {
                count += c - 1;
            }           
    }
    System.out.println(count);
    return 0;

}

}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-29 22:42:10

这里的主要误解似乎是关于如何在for-循环中迭代某些结构。在这里,你写了

代码语言:javascript
复制
for (int n = statues[0]; n < statues[statues.length-1]; n++) {
    int c = statues[n + 1] - statues[n];
}

这是不正确的,因为当您尝试使用statues[statues2]时,您实际上使用的是不存在的statues4;您可能只想引用statuesn。解决这一问题的方法是将n看作一个正则整数,它接受范围[0, statues.length - 1)中的所有值。这看起来更像是

代码语言:javascript
复制
for (int n = 0; n < statues.length - 1; n++) {
    int c = statues[n + 1] - statues[n];
}

我希望这有帮助,如果我不正确地解释你的意图,请告诉我。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61512887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档