-5

再帰で実行される配列があり、配列の最小数を見つけます。プログラムを実行すると、(Assignment9.java:36) if (previousMin > numbers[endIndex]) and (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ます。配列のインデックス付けは 0 から始まり、最後の要素は index にあるため、これは Java では不可能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、最初の呼び出しで 100 を使用していますfindMin。したがって、 を参照numbers[endIndex]すると、配列の末尾を超えてしまいます -numbers[100]は存在しません。

于 2013-11-06T22:45:48.330 に答える
0

Java のインデックスは 0 であり、numbers.length は配列の範囲外になるため、終了インデックスには numbers.length-1 を使用する必要があります。startIndex==endIndex の場合、値 numbers[startIndex] を返すことは範囲外になります。

于 2013-11-06T22:45:49.620 に答える