2012-04-26 10 views
0

私はStringのバイナリ検索を行っていて、出力エラーを表示していました。私は何が欠けているか分からず、助言が必要です。バイナリ検索出力エラー

ここに私のコード:私は何かが欠け

public static final int Not_Found = -1; 

    public static int BS(String[][] record, String x) 
{ 
int low = 0; 
int high = record.length - 1; 
int mid; 

while(low <= high) 
{ 
mid = (low + high)/2; 

if(record[ mid ].compareTo(x) < 0) 
low = mid + 1; 
else if(record[ mid ].compareTo(x) > 0) 
high = mid - 1; 
else 
return mid; 
} 

return Not_Found; 
    } 

その?または私はそれを見つけるために他の方法を使用する必要がありますか?ここ

エラー:

エラー:シンボル を見つけることができない場合(レコード[中間] .compareTo(X)< 0) ^ シンボル:メソッドのcompareTo(String)を

エラー:メソッドのcompareTo(String)を

+0

文字列を文字列と比較することはできません。 –

+1

"String [] [] record"を使用しています。 1dレコードであれば "String [] record"を使用します。 – Arpssss

+0

2Dアレイではどのように作業できますか?何かアドバイス? – user1342633

答えて

1

まあ0:シンボル他 場合(レコード[中期] .compareTo(X)> 0) ^ シンボルを見つけることができませんは2D配列なので、record[j]は文字列ではなく配列を返します。代わりに1D配列を使用することを意味するのでしょうか?

+0

私は2Dアレイをやっていたので、どうすればいいのですか? – user1342633

+0

バイナリ検索は「線形」で行われているので、すべての行を連結して2D配列を1次元配列に張る方法があります。次に、この新しい配列を通常のバイナリ検索で検索できます。または同様に、2D record配列のすべての行を検索するfor-loopを持つことができます。 – arshajii

+0

私はそれを可能にするなら、アドバイスをいただき、ありがとうございます。 – user1342633

1

"String [] []"は2Dレコードを意味します。したがって、record [j]は対応するj列目の文字列配列を返します。文字列と比較することはできません。したがって、1dレコードであれば "String [] record"を使用してください。

+0

2Dで作業したい場合は、差分形式のコードを変更する必要がありますか?または私はちょうどそれらのいくつかを変更する必要がありますか? – user1342633

+0

あなたのコードは、すべてのレコード[mid] [i]をStringと比較するために検索する必要があります。この方法で比較することはできません。たとえば、[0] = 7、レコード[1] [0] = 5、レコード[2] [0] = 0、レコード[2] [1] = 5.レコードを検索すると、結果はあなたのミッドが間違ったミッドを与えるためです。このように、rec [0] = record [0] [0]、rec [0] = record [0] [1] ...などです(レコードを格納するために別の一時配列を使用します)。次に、バイナリ検索を実行し、結果の位置をrecord [] [] row-col numberとして返す。私はそれがより簡単になると思う。 – Arpssss