-5

我有一个递归运行的数组,它找到数组上的最小数字。我运行程序并在 (Assignment9.java:36) if (previousMin > numbers[endIndex]) 和 (Assignment9.java:20) double min = findMin(numbers, 0, numbers.length); 上收到 ArrayIndexOutOfBoundsException 错误;我知道为什么通常会出现这个问题,但我找不到我的代码的修复程序。我不知道我的实际代码是否有效,因为我无法运行该程序。有什么建议么..

 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

4 回答 4

4

您正在访问numbers[endIndex]where endIndex = numbers.length。这在 java 中是不可能的,因为数组索引从 0 开始,最后一个元素位于 index length-1,因此出现异常。

于 2013-11-06T22:44:53.780 回答
3

numbers.length 将返回数组的长度,从 1 开始。您想在方法调用中使用 numbers.length - 1

于 2013-11-06T22:44:59.787 回答
0

包含 100 个元素的数组将它们编号为 0 到 99。但是您endIndex在最初调用findMin. 因此,当您引用 时numbers[endIndex],您已经超出了数组的末尾 -numbers[100]不存在。

于 2013-11-06T22:45:48.330 回答
0

您应该使用 numbers.length-1 作为结束索引,因为 java 是零索引的,并且 numbers.length 将超出数组的范围。当 startIndex==endIndex 时,返回数值 numbers[startIndex] 将超出范围。

于 2013-11-06T22:45:49.620 回答