Der Name eines Romans und sein zugewiesener Ganzzahlcode werden in einem sortierten Array gespeichert, so dass jeder gerade Index (einschließlich 0) einen Code enthält und jeder ungerade Index einen Titel enthält:BinarySearch kann bestimmte Elemente in String nicht finden []
[1, Tom Sawyer, 2, Black Beauty, 3, Treasure Island]
Derzeit habe ich eine Binary Methode implementiert, die einen vom Benutzer eingegebenen Code nimmt und gibt den entsprechenden Titel, wenn Es existiert. Es funktioniert, es sei denn, die Benutzereingaben:
- 100 (letzter Code in dem Array)
2, 6 oder 10; aber arbeitet für 1
public static String binarySearch(String [] bookList, int left, int right, String code) { /* bookList - sorted array * left - leftmost index * right - rightmost index * code - item to look for */ int middle; if (left > right) { return "left>right"; } middle = (left + right)/2; /*set middle to nearest even offset (all # are in even position)*/ middle += middle & 1; if (bookList[middle].equals(code)) { return bookList[middle + 1]; } if (code.compareTo(bookList[middle]) < 0) { return binarySearch(bookList, left, middle - 1, code); } return binarySearch(bookList, middle + 2, right, code); }
Der gesamte Inhalt des Arrays here
Warum vergleichen Sie die 'code' (die Zahl ist) als' String'? Was passiert, wenn Sie "2" und "11" vergleichen? Wandle es in "int" um und vergleiche es dann. – TDG
Die lexikographische Reihenfolge der Zahlen als Strings ist - 1,10,11,12, ..., 19, 100, 2, 20, 21 ... Wenn Sie also Ihre Codes als Strings behandeln, wird das Array nicht sortiert. – TDG
@TDG Ich würde gerne Ihren Kommentar als Antwort auf meine unintelligente Frage akzeptieren. –