Java Arry索引超出绑定exception
当我需要将5个用户输入的值存储到数组中,将其发送到方法,并查找并显示最低值时,我一直在研究这个基本的java程序。
该程序很简单,它运行,但当我输入最后一个数字时,我收到错误:
线程“main”中的exceptionjava.lang.ArrayIndexOutOfBoundsException:4 at minNumber.main(minNumber:14)
救命?
import java.util.*; class minNumber { public static void main(String args[]){ Scanner input = new Scanner(System.in); int numberArray[] = new int[4]; int findLowest; for (int i = 0; i <= numberArray.length; i++){ System.out.println("Enter a value for slot "+(i+1)+ ":"); numberArray[i] = input.nextInt(); } findLowest = getMin(numberArray); displayOutput(findLowest); } public static int getMin(int num[]){ int lowestNum = 0; for (int j = 0; j <= num.length; j++){ if (num[j] < num[j+1]){ lowestNum = num[j]; } } return lowestNum; } public static void displayOutput(int lowest){ System.out.println("The lowest number is: "+lowest); } }
首先,如果你想在一个数组中有5个值,那么用5声明它:
int numberArray[] = new int[5];
其次,你将离开数组的末尾。 更改
for (int i = 0; i <= numberArray.length; i++){
至
for (int i = 0; i < numberArray.length; i++){
你还需要以这种方式改变你的其他j
for
循环。
getMin
一下,除了上面提到的更改之外,你的getMin
方法还需要另外一个更改,因为即使你进行了上面的更改,说num[j+1]
仍会在数组的末尾运行。 我想你需要比较当前的数组元素和lowestNum
,而不是下一个数组元素。
<= numberArray.length
应该变为< numberArray.length
因为数组是0索引的。
在两个循环中删除=。
public static void main(String args[]){ ....... for (int i = 0; i < numberArray.length; i++){ ........ } ......... }
和
public static int getMin(int num[]){ ..... for (int j = 0; j < num.length -1 ; j++){ } .... }