为什么会出现java.lang.ArrayIndexOutOfBoundsException?

Why does java.lang.ArrayIndexOutOfBoundsException occur?

我正在制作一个以相反顺序输出用户输入的数组。我的程序运行正常,但我不断收到此消息,"Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1 在 Reverse.main(Reverse.java:26)"

我正在查看第 26 行,即 "System.out.println(number[x]);",但我不明白这有什么问题。为什么会这样?

    for(int x= number.length -1; x<SIZE; x--) 
    System.out.println(number[x]); 
   }
 }

当 x 小于 SIZE 时,循环正在重复。 SIZE 为 10,因此它不断超出零并检查位置 -1。

将第二个 for 循环中的检查更改为

x >= 0

您试图以相反的顺序输出元素,但您的 for 循环条件类似于将整数输入数组的 y for 循环。

但是向后数 x,条件 x<SIZE 将始终是 true,即使您 运行 离开了数组的开头。这解释了 ArrayIndexOutOfBoundsException.

一旦 x 已通过 0,您必须停止 x for 循环。

for(int x = number.length - 1; x >= 0; x--) 

问题出在你的 for 循环中 -

for(int x= number.length -1; x<SIZE; x--) 
    System.out.println(number[x]);  

将 x 设置为 number.length-1 后 x 无限递减。一旦 x 变为负数并且 number[] 数组尝试使用负索引获取值,例如 number[-1]。然后发生ArrayIndexOutOfBound异常。请改用以下代码片段 -

for(int x= number.length -1; x>=0; x--) 
        System.out.println(number[x]);  

您的代码完美地显示了输出,因为异常发生在输出显示之后。代码显示 number[] 数组中的所有元素,然后发生异常。

非常感谢。