Java 如何从给定数组中查找元素?

Java 如何从给定数组中查找元素?,java,arrays,Java,Arrays,我有一个类似于MyArr{1,3,5,7,9,2,4,6,8,10}的数组。我需要迭代并打印“未找到”,直到达到2。在那之后,我需要打印剩余部分的“Found” 我的方法是使用Arrays.BinarySearch(MyArr,2),它返回2的索引。我不知道如何从这里实现。binarySearch仅适用于已排序(升序)的输入数组,而您的输入数组未排序 解决方案#1: 首先对数组进行排序。然后,binarySearch将为排序数组中的元素找到正确的偏移量 提示:查看数组中的其他方法 请注意,这不是

我有一个类似于
MyArr{1,3,5,7,9,2,4,6,8,10}
的数组。我需要迭代并打印
“未找到”
,直到达到2。在那之后,我需要打印剩余部分的
“Found”


我的方法是使用
Arrays.BinarySearch(MyArr,2)
,它返回2的索引。我不知道如何从这里实现。binarySearch仅适用于已排序(升序)的输入数组,而您的输入数组未排序

解决方案#1:

首先对数组进行排序。然后,
binarySearch
将为排序数组中的元素找到正确的偏移量

提示:查看
数组中的其他方法

请注意,这不是正确的解决方案。实际的问题陈述说,您需要逐步遍历数组,1)为不匹配的元素打印“未找到”,2)在找到第一个匹配项时打印“已找到”。解决方案#1仅解决第二个需求,而不是第一个需求

实际上,二进制搜索不能满足第一个要求

旁白:对数组进行排序以便进行二进制搜索。。。就一次。。。效率低下。排序花费的时间比搜索节省的时间要多。在复杂性方面,排序将是
O(NlogN)
,搜索
O(logN)
将给出
O(NlogN)
的总体复杂性。相比之下,简单的线性搜索是
O(N)
。因此,如果您对每种排序进行
O(logN)
二进制搜索,您将只能实现“收支平衡”

解决方案#2:

忘记二进制搜索,编写一个循环,逐步遍历数组的所有元素


提示:a
for
循环是最好的,但是哪种
for
循环?

二进制搜索
仅适用于已排序(升序)的输入数组,而您的输入数组未排序

解决方案#1:

首先对数组进行排序。然后,
binarySearch
将为排序数组中的元素找到正确的偏移量

提示:查看
数组中的其他方法

请注意,这不是正确的解决方案。实际的问题陈述说,您需要逐步遍历数组,1)为不匹配的元素打印“未找到”,2)在找到第一个匹配项时打印“已找到”。解决方案#1仅解决第二个需求,而不是第一个需求

实际上,二进制搜索不能满足第一个要求

旁白:对数组进行排序以便进行二进制搜索。。。就一次。。。效率低下。排序花费的时间比搜索节省的时间要多。在复杂性方面,排序将是
O(NlogN)
,搜索
O(logN)
将给出
O(NlogN)
的总体复杂性。相比之下,简单的线性搜索是
O(N)
。因此,如果您对每种排序进行
O(logN)
二进制搜索,您将只能实现“收支平衡”

解决方案#2:

忘记二进制搜索,编写一个循环,逐步遍历数组的所有元素


提示:a
for
循环最好,但是对于
循环,哪种
类型的

二进制搜索不能使用,因为它只在排序数组上工作


您需要迭代数组。对于每个元素,必须检查它是否为目标值,并让代码记住结果,然后打印适合结果值的输出。

二进制搜索无法使用,因为它仅适用于排序数组


您需要迭代数组。对于每个元素,您必须检查它是否是您的目标值,并让代码记住结果,然后打印适合结果值的输出。

您能显示到目前为止您尝试了什么吗?该方法被调用,而不是
BinarySearch
,javadoc说:必须对数组进行排序。数组未排序,因此无法使用
binarySearch
。是你自己迭代数组的时候了,这实际上是你任务的一大部分。谁说他需要使用二进制搜索?只要在数组上迭代一次就可以了。@TimBiegeleisen我想这里没有人这么做过。这是OP自己的想法。因此,我提出了同样的建议(即迭代),非常简单。有时你应该阅读文档。看看。你能展示一下你到目前为止尝试过的方法吗?这个方法被调用,而不是
BinarySearch
,javadoc说:数组必须被排序。数组未排序,因此无法使用
binarySearch
。是你自己迭代数组的时候了,这实际上是你任务的一大部分。谁说他需要使用二进制搜索?只要在数组上迭代一次就可以了。@TimBiegeleisen我想这里没有人这么做过。这是OP自己的想法。因此,我提出了同样的建议(即迭代),非常简单。有时你应该阅读文档。请看。首先对数组排序将产生不正确的结果。解决方案应打印
未找到
5次,然后打印
找到
5次。如果您排序,数字2将位于不同的位置,输出将是
未找到
1次,以及
找到
9次。因此,您的答案的2/3是一个无法使用的解决方案(排序)?是。对于OP来说,理解他不能/不应该做的原因(复数!!!)是很有用的。对不起,也许我只是在这么晚的时候(凌晨3点)有点不对劲,但是你对为什么不做的描述是错的。当您找到数组时,您会说“print
found
”,但当您找到值时,它应该是“print
found
,然后为剩余值打印
found
”。您无法排序的原因在于,它会更改您要查找的值的位置,这甚至会使您的初始语句出错:“
binarySearch
将为您找到正确的偏移量”。它不会,因为它不是正确的o