gpt4 book ai didi

java - 无法理解数组边界

转载 作者:行者123 更新时间:2023-12-01 19:50:02 25 4
gpt4 key购买 nike

我最近一直在学习编码,但不幸的是,迭代数组并理解它们的 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它有效。

有哪位好心人能解释一下为什么吗?我知道这是一个愚蠢的问题,但我似乎无法理解。

最佳答案

数组就像一个对象链。如果您知道这些对象的索引,那么您始终可以访问其中任何一个对象。因此,如果您有一个长度为 9 的数组,其中包含前 9 个正整数,您将拥有从 0 到 8 的有效索引。

 0  1  2  3  4  5  6  7  8
[1][2][3][4][5][6][7][8][9]

要打印出数组内的值,您可以使用:

for (int i = 0; i < values.length; i++) {
System.out.println(values[i]);
}

如果您想向后打印它,那么您应该从它的最后一个索引开始并递减i,直到它大于或等于数组的起始索引:

for (int i = values.length - 1; i >= 0; i--) {
System.out.println(values[i]);
}

每当您尝试访问超出有效索引范围的索引时,都会导致 IndexOutofboundsException。因此,如果您想调用任何算术来计算索引,请注意您只有很少的有效值。

关于java - 无法理解数组边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51673743/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com