ArrayIndexOutOfBoundsException:在我的数组中

时间:2013-11-06 22:43:03

标签: java arrays recursion

我有一个在递归上运行的数组,它在数组上找到最小数字。我运行程序,我得到一个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];
         }


}

4 个答案:

答案 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]将超出范围。