8

我得到错误..

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
    at Reverse.main(Reverse.java:20). 

语法没有错误,所以我不确定为什么编译时会出错?

public class Reverse {

public static void main(String [] args){
    int i, j;


    System.out.print("Countdown\n");

    int[] numIndex = new int[10]; // array with 10 elements.

    for (i = 0; i<11 ; i++) {
        numIndex[i] = i;// element i = number of iterations (index 0=0, 1=1, ect.)
    }

    for (j=10; j>=0; j--){ // could have used i, doesn't matter.
        System.out.println(numIndex[j]);//indexes should print in reverse order from here but it throws an exception?
    }
}

}

4

4 回答 4

22

您在 的整数上声明了数组10 elements。而你正在迭代i=0 to i=10i=10 to i=0那就是11 elements. 显然它是一个index out of bounds error.

将您的代码更改为此

public class Reverse {

  public static void main(String [] args){
    int i, j;

    System.out.print("Countdown\n");

    int[] numIndex = new int[10]; // array with 10 elements.

    for (i = 0; i<10 ; i++) {  // from 0 to 9
      numIndex[i] = i;// element i = number of iterations (index 0=0, 1=1, ect.)
    }

    for (j=9; j>=0; j--){ // from 9 to 0
      System.out.println(numIndex[j]);//indexes should print in reverse order from here but it throws an exception?   
    } 

  }
}

记住索引从 0 开始。

.

于 2013-06-06T02:49:58.767 回答
3

Java 使用基于 0 的数组索引。当您创建一个大小为 10 的数组时,new int[10]它会在数组中创建 10 个整数“单元格”。索引为:0, 1, 2, ...., 8, 9。

您的循环计数到比 11 或 10 小 1 的索引,并且该索引不存在。

于 2013-06-06T02:12:33.307 回答
1

该数组的大小为 10,这意味着它可以从 0 到 9 进行索引。numIndex[10]确实超出了范围。这是一个基本的错误。

于 2013-06-06T02:11:44.833 回答
1

Array具有元素的 Java 中的一个1009。所以你的循环需要覆盖这个范围。目前您正在从010100

于 2013-06-06T02:13:17.017 回答