遍历数组中的元素并倒序输出

21

这是我的代码:

int myArray[]={1,2,3,4,5,6,7,8};

for(int counter=myArray.length; counter > 0;counter--){
    System.out.println(myArray[counter]);
}

我想按降序(即从数组的最后一个元素到第一个元素)输出数组,但我遇到了以下错误:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 8
    at task1.main(task1.java:14)

为什么会发生这种情况?我原本希望通过使用 myArray.length 来将计数器设置为 8,然后代码就只会打印出数组的第八个元素,然后继续打印它前面的元素。


我不知道Java中的数组索引风格,但如果它与C中的相同,那么在第一次迭代中您正在尝试打印超出数组边界的数组元素。 - Mallik
小贴士:如果您使用Intellij IDEA,键入myArray.forr(r表示反向),然后在建议处按Enter将生成循环。对于普通循环,您可以键入myArray.fori。 - Praveen E
7个回答

83
在Java中,数组的索引从0length-1,而不是从1length。因此,您应该相应地分配变量并使用正确的比较运算符。
你的循环应该是这样的:
for (int counter = myArray.length - 1; counter >= 0; counter--) {

我原本是这样的,但是我没有从计数器中减去1,而是保持不变。干得好。 - James111
如果我不关心索引,我们可以像这样使用类型 for (int i : nums) 此方式但是在倒序。 - Zhou Haibo

6

使用myArray.length-1

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

6
  • 第一个索引是0,最后一个索引是7而不是8
  • 数组的大小为8

3

这里的问题出在这段代码: myArray.length。在Java中,和大多数其他语言一样,数据结构是基于0的,所以最后一个元素的索引为structure.length - 1(第一个是0)。因此,在您的情况下,您应该将循环更改如下:

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

2

您选择的起始索引不正确。请按如下方式进行修改:

for(int counter= myArray.length - 1; counter >= 0;counter--) {

数组的最后一个索引是其长度减1。


2

计数器从myArray.length的索引开始,实际上是从1而不是0开始计数。

    for(int counter=myArray.length - 1; counter > 0; counter--){

0

int myArray[]={1,2,3,4,5,6,7,8};

这里,给定的数组长度为8,因为计数从1开始,但是对于索引myArray[0] = 1;等等.... 这里索引计数从0开始。 因此,在您的代码片段中

for(int counter = myArray.length - 1; counter >= 0; counter--) {  

超出数组边界,因此它会显示ArrayIndexOutOfBoundsException


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接