データ構造クラス プロジェクトからの誤った検索結果をデバッグしています。この現在のプロジェクトでは、順序付けられた展開されたリンク リストを作成し、コンテンツに対して検索を実行してから、包括的開始点から排他的終了点までのアイテムのサブリストを返す必要がありました。これを行うには、内部配列を検索して開始要素のインデックス ポイントを見つける必要があります。これはバイナリ検索で行いますが、これは最初に見つかった一致のみを返し、その前に他の一致が存在する可能性があるため、最初の真の一致を見つけるために配列に戻る必要があります。私はこれを介して行います
//get first index match, work backwards
int index= binarySearch(node.items, 0, node.numUsed, item, comp);
while (index>0 && comp.compare(node.items[index], item)==0){
index--;
}
教授は、文字列を分割し、各文字を構造内の項目として追加するテスト コードを提供しました。また、ネストされた StringCmp クラスも含めました。これは、comp
上記の二分探索宣言のように参照されます。彼の比較方法は
public int compare(String s1, String s2) {
cmpCnt++;
return s1.compareTo(s2);
}
ただし、i から o までのサブリスト メソッドでテストを実行すると、このメソッドは true 値を返し、これにより、作成comp.compare(h,i)==0
した検索クラスから開始結果がスローされます。return index++
私はもともと、構造テストに合格するのに十分な量で補正しましたが、予想される開始点を 1 つずらしました。
では、明らかに false であるのに、なぜこれが true を返すのでしょうか?
EDITは、i から o まで実行されると予想されるサブリスト メソッドの出力を追加しました
入力テスト文字列=abcdefghijklmnopqrstuvwxyzaeiou
サブリストメソッドからの戻り:
チャンク 1 (10 の 4 を使用): [h][i][i][j]
チャンク 2 (10 の 4 を使用): [k][l][m][n ]
h はリストにまったく含まれていないはずですが、comp.compare(node.items[index], item)==0
は i == h という true を返しています。これは明らかに false です。
編集 2 プロジェクトの 2 番目の部分では、テキスト ファイルを解析し、Artist、Title、および Lyrics フィールドから Song オブジェクトを作成し、プレフィックスを使用してタイトルを検索する必要があります。ここで発生するバグは一文字検索や複数文字検索では発生しないので、テストの StringCmp ネストクラスに問題があると思います。