0

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

该程序很简单,并且可以运行,但是当我输入最后一个数字时,出现错误:

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

3 回答 3

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,而不是下一个数组元素。

于 2013-03-19T18:08:11.677 回答
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++){

   }
   ....
}
于 2013-03-19T18:09:26.090 回答
0

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

因为数组是 0 索引的。

于 2013-03-19T18:07:52.550 回答