1

プロジェクトの一環としてバイナリ検索プログラムを作成しました。コンパイルして実行しますが、ターゲット値の配列を検索する必要があるプログラムの部分に到達すると(ユーザーが入力します)、何もしません。ターゲット値を入力できるようにしますが、表示されません検索または終了します。

これが私のコードです:

/**
 * 
 */
package ProofOfConcepts;

import java.util.Random;
import java.util.Scanner;

/**
 * @author Kirome
 *
 */

public class BinarySearch {

    static int RandomNum;
    static int NumSize;
    static int[] arr;
    static int rangeOfNum;
    static int LookFor;
    static Random numGen = new Random();
    static Scanner Input = new Scanner(System.in);
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("Enter the size of the data set");
        NumSize = Input.nextInt();
        System.out.println("Enter the range of the random numbers");
        rangeOfNum = Input.nextInt();
        arr = new int[NumSize];
        for (int i = 0; i <= NumSize-1; i++) {
            RandomNum = numGen.nextInt(rangeOfNum);
            arr[i] = RandomNum;
            System.out.println("Number is: " + RandomNum);  
        }
        System.out.println("Enter number you want to search for: ");
        LookFor = Input.nextInt();
        binarySearch(arr[0], arr.length-1, LookFor, arr);
    }
    //Binary Search Algorithm
    public static int binarySearch(int LowIndex, int HighIndex, int Target, int[] array) {
        int MidIndex = (LowIndex + HighIndex)/2;    
        while (LowIndex <= HighIndex) {
            if (array[MidIndex] == Target){
                System.out.println("Target is found at: " + array[MidIndex]);
                if (array[MidIndex] < Target){
                    binarySearch(LowIndex, MidIndex-1, Target, array);
                }
                if (array[MidIndex] > Target){
                    binarySearch(MidIndex+1, HighIndex, Target, array);
                } else {
                    System.out.println("Target number is not in the array");
                }
            }
        }
        System.out.println(array);
        return Target;
    }
}

正しく動作しない理由は単純なものに違いないことを知っているので、イライラします。前もって感謝します。ps 私は最高のプログラマーではありません。

4

3 に答える 3

0

答えとして書き直す -

入力がソートされていることを確認するだけでなく、メソッドが結果を元の呼び出しに正しく巻き戻すことができるように、再帰的二分探索メソッドには戻り値が含まれている必要があります。

例えば ​​-

if (array[MidIndex] < Target)
     return binarySearch(LowIndex, MidIndex-1, Target, array);
else if (array[MidIndex] > Target)
     return binarySearch(MidIndex+1, HighIndex, Target, array);
于 2013-10-24T18:30:06.073 に答える