0

プログラムを実行すると、挿入ソートは適切に実行されますが、バイナリ検索を使用して配列内で検索する番号を尋ねると、プログラムは静止し、終了しません。 . スキャナーと関係があると思います。挿入ソートとバイナリ検索に別のスキャナーを使用して問題を解決しましたが、それを機能させるために別のスキャナーを作成する必要はありませんか?

import java.util.Scanner;
public class Search {
    public static void main(String [] args){

        Insertion insert = new Insertion();
        Scanner input = new Scanner(System.in);

        int[] array = new int[5];

        int low = 0, high = array.length - 1, mid = (low+high)/2;
        int num =0;
        int target = 0;

        for(int i = 0; i < array.length; i++){
            System.out.println("Enter a number: ");
            num = input.nextInt();
            array[i] = num;
        }

        insert.insertion_srt(array, array.length);

        System.out.println("Your numbers sorted: ");

        for(int a = 0; a < array.length; a++){
            System.out.print(array[a]+" ");
        }

        System.out.println("\nWhich number do you want to look for?: ");
            target = input.nextInt();

        while(low<=high && array[mid] != target){
            if(target > array[mid])
                low = mid + 1;
            else
                high = mid -1;
        }

        if(low>high)
                mid = -1;

        System.out.println(mid);
        input.close();

    }

}
4

2 に答える 2

2

midの値がWHILE ループで変更されないことが原因である可能性が最も高いです: while(low<=high && array[mid] != input)。したがって、ループが終了することはありません。なぜなら、array[mid]が最初に入力と等しくない (そして変更されない) 場合は、そのまま実行し続けるからです。おそらくmid、IF の決定後に変数を再定義しますか?

if(target > array[mid])
  low = mid + 1
else
  high = mid - 1
mid = (low+high)/2

変数が変更されないwhile(low<=highため、while 条件 ..の残りの半分も真になることはありません。midつまり、 ifmid = 2target > array[mid]、 thenlowは 3 になります。したがって、反復ごとに、low変数には常に値 3 が割り当てられ続けます。

于 2013-02-06T05:10:57.980 に答える
0

問題はスキャナーにはありませんが、目的の値を検索する方法を教えてください。二分探索を実装したい場合は、実装が正しくありません。正しい実装は次のとおりです。

while (low<=high && array [mid] != target)
{
    if (target > array [mid])
        low = mid + 1;
    else
        high = mid - 1;

    mid = (low + high) / 2; // You probably missed this
}
于 2013-02-06T05:17:48.127 に答える