2016-03-22 15 views
-1

私はバイナリ検索を行っています。配列とキー値をユーザ入力にしたいので、ここでスキャナを使用しています。バイナリコードでエラーが発生しました

私はこのコードを書いていますが、ユーザー入力としてキー値を与えたときになぜ機能しないのかわかりません。バイナリ検索は何ですか、また、スタックオーバーフローの他の質問誰もがhelp.Myコードができれば、私はそう把握することはできませんコーディングの問題があります:

//Program for getting a key value doing Binary Search 
import java.util.Scanner; 

public class Bin_Search{ 

public static void main(String[] args) 
{ 
    Scanner scan = new Scanner(System.in); 
    int n = scan.nextInt(); 
    int a[] = new int[n]; 
    for(int i =0; i<n; i++) 
     a[i]= scan.nextInt(); 
    for(int i =0; i<n; i++) 
     System.out.print(a[i] + " "); 
    System.out.println("Enter the value you want to find"); 
    int key = scan.nextInt(); 
    Bin_Search bin = new Bin_Search(); 
    System.out.println("position is" + bin.b_search(a,key)); 
} 

//Method to perform binary search 
public int b_search(int arr[], int key) 
{ 
    int n = arr.length-1; 
    int lo = 0; 
    int hi = n-1; 
    int mid = (lo+hi)/2; 
    while(lo<=hi) 
    { 
     if(a[mid]>key) 
      hi = mid-1; 
     else if(a[mid]<key) 
      lo = mid+1; 
     else 
      return mid; 
    } 
    return -1; 
} 
} 
+1

あなたはIDEを持っていますか?それらのほとんどは無料です。そのIDEでデバッガを使用する方法を学びます。そのような質問をもう一度する必要はありません。最も一般的なIDEは、IntelliJ IDEA(私の選択)、Eclipse、NetBeansです。 – user3707125

+0

入力の例、期待する出力、入手する出力を挙げてください。 「うまくいきません」と私にはあまりにも曖昧です。 –

+0

私が間違っていると私を修正しますが、配列が必ずしもソートされていないように見えます。つまり、バイナリ検索は必ずしも機能しません。バイナリ検索にはソートされたデータが必要です。 –

答えて

4

あなたはmidを変更することはありません、あなたは無限ループ内の配列内の同じ位置を確認します。あなたは、配列内の最後の項目が欠落している

int n = arr.Length - 1; 
int hi = n - 1; 

hiが実際arr.Length - 2であることを意味し、ところでそれをループ

while(lo<=hi) 
{ 
    if(a[mid]>key) 
     hi = mid-1; 
    else if(a[mid]<key) 
     lo = mid+1; 
    else 
     return mid; 

    mid = (lo+hi)/2; 
} 

のすべての反復を変更する必要があります。ちょうど

int hi = arr.Length - 1; 
+1

著者は少なくとも1週間はデバッガを習得する瞬間があなたの答えに遅れていることを理解していますか?そして次回は何かがうまくいかないとき、彼は自分で仕事をするのではなく、ここに再び来るでしょう。 – user3707125

+0

こんにちはuser3707125、まず第一に私はIDEを使用していないとはい、私はデバッガを使用する方法がわかりません。今、主なものは、このサイトがあなたのような良いプログラマによって私のような新しいプログラマーを助けるためのものだということです。:) –

+0

とありがとうございました.. :) –

関連する問題