我有一个在递归上运行的数组,它在数组上找到最小数字。我运行程序,我得到一个ArrayIndexOutOfBoundsException错误(Assignment9.java:36) if(previousMin> numbers [endIndex])和(Assignment9.java:20) double min = findMin(numbers,0,numbers.length);我知道为什么这个问题经常发生,但我找不到我的代码修复。我不知道我的实际代码是否有效,因为我无法运行该程序。任何建议..
import java.io.*;
import java.text.*;
public class Assignment9
{
public static void main(String[] args) throws IOException
{
int [] numbers = new int[100];
InputStreamReader streamR = new InputStreamReader(System.in);
BufferedReader inFile = new BufferedReader(streamR);
String reader = inFile.readLine();
double min = findMin(numbers, 0, numbers.length);
System.out.print ("The minimum number is " + min + ('\n'));
}
public static int findMin (int [] numbers, int startIndex, int endIndex)
{
if (startIndex == endIndex)
{
return numbers[startIndex];
}
else
{
double previousMin = findMin (numbers, startIndex, endIndex - 1);
if (previousMin > numbers[endIndex])
return numbers[endIndex];
else
return numbers[endIndex];
}
}
答案 0 :(得分:4)
您正在numbers[endIndex]
访问endIndex = numbers.length
。这在java中是不可能的,因为数组索引从0开始,最后一个元素在索引length-1
,因此是异常。
答案 1 :(得分:3)
numbers.length将返回数组的长度,从1开始。你想在方法调用中使用numbers.length - 1
答案 2 :(得分:0)
包含100个元素的数组,编号从0到99.但在endIndex
的初始调用中,您使用100作为findMin
。因此,当您引用numbers[endIndex]
时,您已超越数组的末尾 - numbers[100]
不存在。
答案 3 :(得分:0)
您应该使用numbers.length-1作为结束索引,因为java是零索引的,而numbers.length将超出数组的边界。当startIndex == endIndex时,返回值number [startIndex]将超出范围。