Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ArrayList二进制搜索(ArrayList)_Java_Arraylist_Binary Search - Fatal编程技术网

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)
在这里,再次获取ArrayList
students
,并尝试将方法应用于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;
}