0

ソートされた整数のArrayListを取るプログラムを作成しようとしています。範囲とArrayListから返される値を指定するバイナリ検索メソッドがあります。

import java.util.ArrayList;

public class ArraySearch {
    ArrayList<Integer> myArrayList = new ArrayList<Integer>();
    static ArrayList<Integer> range = new ArrayList<Integer>();

public static ArrayList<Integer> binarySearch(ArrayList<Integer> arrayList, int min, int max, int first, int last)
                                        throws NotFoundException {
    if(first > last) {
        throw new NotFoundException("Elements not found.");
    }
    else {
        int middle = (first + last) /2;
        int mid_number = arrayList.get(middle);

        if(mid_number >= min && mid_number <= max)
        {
            range.add(middle);
        }

        if(mid_number <= min) {
            if(mid_number == min) {
                range.add(arrayList.get(middle));
                return binarySearch(arrayList, min, max, first, middle-1);
            }
            return binarySearch(arrayList, min, max, first, middle-1);
        }
        else {
            if(mid_number == max) {
                range.add(arrayList.get(middle));
                return binarySearch(arrayList, min, max, middle+1,last);
            }
            return binarySearch(arrayList, min, max, middle+1,last);
        }
    }   
}

public static void main (String [] args) throws NotFoundException {
    ArrayList<Integer> a = new ArrayList<Integer>();
    a.add(0);       
                a.add(1);
    a.add(2);
    a.add(3);
    a.add(6);
    a.add(7);
    a.add(7);
    a.add(10);
    a.add(10);
    a.add(10);

    binarySearch(a, 3, 7, 0, 9);
}

}

助けてもらえますか?ArrayListの範囲
を返す必要がある基本ケースの条件がどうあるべきかわかりません。そして、二分探索法のロジックが間違っていたのではないかと思います。

4

1 に答える 1