Java数组索引超出绑定异常

时间:2013-03-19 18:06:28

标签: java arrays bounds out

当我需要将5个用户输入的值存储到数组中,将其发送到方法,并查找并显示最低值时,我一直在研究这个基本的java程序。

该程序很简单,它运行,但当我输入最后一个数字时,我收到错误:

线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:4         在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);
}
}

3 个答案:

答案 0 :(得分:3)

首先,如果你想要一个数组中的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方法还需要进行其他更改,因为即使您进行了更改,num[j+1]仍然会在数组末尾运行。我认为你需要比较当前的数组元素与lowestNum,而不是下一个数组元素。

答案 1 :(得分:0)

<= numberArray.length应该成为< numberArray.length

因为数组是0索引的。

答案 2 :(得分: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++){

   }
   ....
}