问题
I have been working on this basic java program when I need to store 5 user entered values into an array, send it to a method, and find and display the lowest value.
The program is simple enough, and it runs, but when I enter the last number, I get the error:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4 at minNumber.main(minNumber:14)
Help?
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);
}
}
回答1:
First, if you want 5 values in an array, then declare it with 5:
int numberArray[] = new int[5];
Second, you are going off the end of the array. Change
for (int i = 0; i <= numberArray.length; i++){
to
for (int i = 0; i < numberArray.length; i++){
You'll need to change your other j
for
loop this way also.
As an aside, your getMin
method needs another change besides the change I mentioned above, because saying num[j+1]
will still run off the end of the array even if you make the change above. I think you'll need to compare the current array element versus lowestNum
, not the next array element.
回答2:
<= numberArray.length
should become < numberArray.length
since arrays are 0 indexed.
回答3:
Remove the = in both loop.
public static void main(String args[]){
.......
for (int i = 0; i < numberArray.length; i++){
........
}
.........
}
and
public static int getMin(int num[]){
.....
for (int j = 0; j < num.length -1 ; j++){
}
....
}
来源:https://stackoverflow.com/questions/15507177/java-arry-index-out-of-bound-exception