【发布时间】:2018-08-03 13:26:37
【问题描述】:
我最近一直在学习编码,但不幸的是,我无法遍历数组并理解它们的 Length 属性并且不会越界。
我需要在 Java 中解决以下练习 - 输入一些数字,解析它们并将它们放入一个数组中,然后获取其中三个最大的数字并按降序打印它们。我设法做到了,但我确实需要查看最后一部分,因为我得到了 ArrayIndexOutOfBoundsException。我已经对数组中的值进行了硬编码,以便尝试理解它,但我希望能得到一些帮助。
这是我的解决方案:
int[] numbers = {1, 2, 3, 4, 5, 6};
Arrays.sort(numbers);
int count = Math.min(3, numbers.length);
for (int i = 0; i < count; i++) {
System.out.println(numbers[i + numbers.length - 1]);
我在这里要做的是按升序打印它们,因为按降序打印它们将是数字[numbers.length - 1 - i]。在我的例子中,我得到了 OutOfBounds。如果我这样做 i + numbers.length - 3 它会起作用。
有人能解释一下原因吗?我知道这是一个愚蠢的问题,但我似乎无法理解。
【问题讨论】:
-
numbers 数组的索引范围从 0 到 5。在 println 语句中,我们在它给出的循环的第一次迭代中将 5(这是数组的长度 - 1)添加到 'i'数组的最后一个元素。在循环的第二次迭代中,将 5 添加到 i(现在为 1)等于 6,但您的数组中没有足够的值来获取该值。这给出了出界异常。 Java中数组下标从0开始
-
为什么你有一个'count'变量?只需打印出 i 并将其作为循环的第一行,也许这将有助于使一些事情变得清晰
-
作为学习编码的一部分,一旦您熟悉了您最喜欢的 IDE 中的调试器,这将非常有帮助
-
@PraneethGudumasu 对,我现在明白了。我本质上是结合了 i 的值和数组的长度,但整个事情实际上是我想要检索的索引。所以在循环的第一次迭代中 i = 0 + numbers.length - 3 即 6 - 3 = 3。结果是 3,如“给我索引 3 处的内容”,在我的例子中是数字 4 .
-
@Stultuske 最初的事情是让用户输入我想要排序的数字并打印最大的三个。在对数组的输入进行硬编码并发布后,我忘记删除计数了,抱歉。
标签: java arrays indexoutofboundsexception