Java ArrayList二进制搜索(ArrayList)
另一个在Java ArrayList二进制搜索(ArrayList),java,arraylist,binary-search,Java,Arraylist,Binary Search,另一个在 search == students.getTotal(i) 对于第一个,我应该访问students并比较I进行搜索,但我无法检索students中的数据 在第二个例子中,我应该知道搜索是在左侧还是右侧继续 有谁能告诉我如何解决这个问题吗?我可能知道我使用了错误的方法获取数据,但我需要一个方向;DR:问题在于您混淆了ArrayList学生及其成员。 您将方法应用于学生,ArrayList,您应该应用于其单个成员 更深入的解释: 正如@Darshan在评论中指出的,ArrayList没
search == students.getTotal(i)
对于第一个,我应该访问students
并比较I
进行搜索,但我无法检索students
中的数据
在第二个例子中,我应该知道搜索是在左侧还是右侧继续
有谁能告诉我如何解决这个问题吗?我可能知道我使用了错误的方法获取数据,但我需要一个方向;DR:问题在于您混淆了ArrayList
学生及其成员。
您将方法应用于学生
,ArrayList,您应该应用于其单个成员
更深入的解释:
正如@Darshan在评论中指出的,ArrayList
没有方法getTotal
。即使它这样做了,此代码也将始终返回相同的值
你可能是说
students.compareTo(students.get(mid))
这将获取i
-th student,并将getTotal()
应用于student
的实例。返回该特定学生的getTotal
结果
你在第二部分中犯了同样的错误:
search == students.get(i).getTotal()
students.compareTo(students.get(mid))<0)
在这里,再次获取ArrayListstudents
,并尝试将方法应用于ArrayList,而不是单个学生
解决方法也是:从列表中选取特定的学生(学生i,由students.get(i)
标识),并对其应用compareTo
方法
ArrayList的官方文档是。首先,我认为它是mid=(First+last)/2
其次,我会使用数组,因为它更简单。但如果您特别想使用ArrayList,则可以执行以下操作:
students.compareTo(students.get(mid)) < 0)
publicstaticbooleanbarysearch(arrayliststudents,int-search){
int first=0;
int last=students.size()-1;
int mid;
while(前0){
last=mid-1;
}否则{
第一个=中间+1;
}
}
返回false;
}
说明:使用ArrayList.get
您只会在特定位置i
获得要与mid
元素进行比较的ArrayList元素。
您所犯的错误是,您将整个列表学生与列表中的特定元素(中间的元素)进行比较,您应该将您要查找的值与列表中的中间元素进行比较,以查看它是否大于或小于。1)ArrayList没有getTotal方法我的学生类中有一个getTotal我不能调用它?可能重复尝试从相应索引的学生ArrayList获取学生对象。欢迎使用堆栈溢出!我冒昧地编辑了你的答案;通过在变量名周围加上反勾号,可以将变量名放入代码标记中。无论如何,你得到了正确的答案-OP混淆了列表和单个元素。我找到的所有binarysearch网站都是mid=first+(last-first)/2;有没有什么网站可以帮我把array转换成arraylist?我仍然得到一个错误“类型arraylist的方法elementAt(int)未定义”有没有什么网站可以让我读到元素调用的信息?@POH My bad,在arraylist中它被称为get
。看。我已经更新了答案。我尝试了你对“students.compareTo(students.get(mid))”的编码,但这不是你给我的文档的一部分,也没有任何方法可以比较两个字符串。有没有其他方法可以替代follow@POH该文档是针对ArrayList的。ArrayList是一个容器,它包含元素。有点像一个孩子的玩具盒:你可以用这个盒子做一些事情(移动它,把它堆在另一个盒子上,推它…),而不必关心里面到底有哪些玩具。或者,你可以拿出一个玩具,用它做些什么。同样,你也有一个学生列表<代码>获取
从列表中获取单个学生。然后,您需要找到对学生类进行操作的操作。顺便说一句,java字符串的文档是。
students.compareTo(students.get(mid)) < 0)
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;
}