[英]Insertion of strings into an ArrayList using a binary search in Java?
[英]Java ArrayList binary search ( arrayList)
public static boolean binarySearch(ArrayList<Student> students, int search) {
int first = 0;
int last = students.size() - 1;
int mid;
while (first <= last) {
mid = first + (last - first) / 2;
if (search == students.getTotal(i)) {
return true;
} else if (students.compareTo(students.get(mid)) < 0) {
last = mid - 1;
} else {
first = mid + 1;
}
}
return false;
}
在這種方法中,我應該返回true
,如果search
發現,和false
如果search
沒有找到。
但是,我無法從ArrayList
檢索信息。
這里有兩個錯誤。
一處
search == students.getTotal(i)
另一個在
students.compareTo(students.get(mid))
對於第一個,我應該訪問students
並比較i
進行搜索,但是我無法檢索students
的數據。
在第二個中,我應該知道搜索是在左側還是右側繼續進行。
誰能給我有關解決此問題的提示? 我可能知道我使用錯誤的方式獲取數據,但是我需要一個指導。
TL; DR:問題在於您使ArrayList students
及其成員感到困惑。
您將方法應用於ArrayList students
,應將其應用於單個成員。
更深入的解釋:
正如@Darshan的注釋中指出的那樣, ArrayList
沒有方法getTotal
。 即使這樣做,此代碼也將始終返回相同的值。
你可能是說
search == students.get(i).getTotal()
這將使用第i
個學生,並將getTotal()
應用於該Student
實例。 返回該特定學生的getTotal
結果。
在第二部分中,您基本上犯了相同的錯誤:
students.compareTo(students.get(mid)) < 0)
在這里,您再次選擇ArrayList students
並嘗試將方法應用於ArrayList,而不是單個學生。
解決方案再次是:從列表中選擇特定的學生(Student #i,由students.get(i)
標識,然后將compareTo
方法應用於該students.get(i)
。
ArrayLists的官方文檔在這里 。
首先,我認為它是mid =(first + last)/ 2。
其次,我將使用數組,因為它更容易。 但是,如果您特別想使用ArrayList,則可以執行以下操作:
public static boolean binarySearch(ArrayList<Student> students, int search) {
int first = 0;
int last = students.size() - 1;
int mid;
while (first <= last) {
mid = ( first + last ) / 2;
if (search == students.get(i)) {
return true;
} else if (search.compareTo(students.get(mid)) > 0) {
last = mid - 1;
} else {
first = mid + 1;
}
}
return false;
}
說明:使用ArrayList.get
您只可以在要與mid
元素進行比較的特定位置i
上獲得ArrayList的元素。
您所犯的錯誤是,將整個列表中的students
與列表中的特定元素(中間的一個)進行比較,在這里您應該將所需的值與列表的中間元素進行比較,看是否更大或更少。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.