二分探索に問題があります。
最初は機能しますが、ユーザーがメニューからこのオプションを選択すると、配列にないリゾートでは機能せず、まったく機能しないこともあります。なぜ機能しないのかわかりません。ここでさまざまなスレッドを読んで理解しようとしましたが、困惑しています。
編集:私はそれがうまくいったと思います。コード全体を取り出して書き直しました。最終結果を見ると唯一の違いは、if else if ステートメントの括弧です。
if (resorts[middle].getName().compareTo(getDataFor) > 0)
{
high = middle - 1;
}
else if (resorts[middle].getName().compareTo(getDataFor) < 0)
{
low = middle + 1;
}
else
{
resorts[middle].display();
found = true;
}
お手伝いありがとう!
else if (choice == '2')
{
found = false;
while (!found)
{
System.out.print("Which resort would you like data for?: ");
getDataFor = kb.nextLine().toUpperCase();
low = 0;
high = resorts.length;
while (low <= high && !found)
{
middle = (high + low) / 2;
if (resorts[middle].getName().compareTo(getDataFor) > 0)
high = middle - 1;
else if (resorts[middle].getName().compareTo(getDataFor) < 0)
low = middle + 1;
else
{
resorts[middle].display();
found = true;
}
}
if (!found)
System.out.println("Resort not found, please try again.");
}
}