我正在嘗試在 Java 中實作遞回二進制搜索演算法。
我正在有序的字串陣列中尋找一個字串。
為什么我得到 ArrayIndexOutOfBoundsException 輸入“eeeeee”,而不是“eeeeee”?
先感謝您。
import java.util.Scanner;
class binarySearch{
public static boolean recursiveBinarySearch(String[] arr, String searchTerm, int start, int end){
int middle = start (end-start)/2;
if(start > end){
return false;
}
if(arr[middle].equals(searchTerm)){
return true;
} else if(arr[middle].compareTo(searchTerm) > 0){
return recursiveBinarySearch(arr, searchTerm, start, middle-1);
} else if(arr[middle].compareTo(searchTerm) < 0){
return recursiveBinarySearch(arr, searchTerm, middle 1, end);
}
return false;
}
public static void main(String[] args){
Scanner console = new Scanner(System.in);
String[] saved = {"aaaa","bbbb","cccc","ddddd","eeeee"};
String searchTerm = "";
do{
System.out.println("Term to search in the ordered array:");
searchTerm = console.nextLine();
} while(searchTerm.equals(""));
console.close();
if(recursiveBinarySearch(saved, searchTerm, 0, saved.length)){
System.out.println("Term found!");
} else {
System.out.println("Term NOT found!");
}
}
}
執行緒“主”java.lang.ArrayIndexOutOfBoundsException 中的例外:索引 5 超出長度 5 的范圍
uj5u.com熱心網友回復:
你end以saved.length. 這里的問題是,.length它將為您提供從 開始計數的長度1,而陣列與0.
只需saved.length-1像in一樣end輸入recursiveBinarySearch,就可以了!
import java.util.Scanner;
class binarySearch{
public static boolean recursiveBinarySearch(String[] arr, String searchTerm, int start, int end){
int middle = start (end-start)/2;
if(start > end){
return false;
}
if(arr[middle].equals(searchTerm)){
return true;
} else if(arr[middle].compareTo(searchTerm) > 0){
return recursiveBinarySearch(arr, searchTerm, start, middle-1);
} else if(arr[middle].compareTo(searchTerm) < 0){
return recursiveBinarySearch(arr, searchTerm, middle 1, end);
}
return false;
}
public static void main(String[] args){
Scanner console = new Scanner(System.in);
String[] saved = {"aaaa","bbbb","cccc","ddddd","eeeee"};
String searchTerm = "";
do{
System.out.println("Term to search in the ordered array:");
searchTerm = console.nextLine();
} while(searchTerm.equals(""));
console.close();
if(recursiveBinarySearch(saved, searchTerm, 0, saved.length-1)){
System.out.println("Term found!");
} else {
System.out.println("Term NOT found!");
}
}
}
uj5u.com熱心網友回復:
陣列索引從 0 到 4,您將其傳遞給 save.length,它的值為 5。它不會因“eeeee”而失敗,因為代碼在到達錯誤之前找到了陣列中的專案。將行更改為 saved.length-1。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/407761.html
標籤:
上一篇:如何在此Java8 應用程式中正確使用map運算子來檢索、修改和更新資料庫上的物件?
下一篇:SQLServer中的組合表列
