Java 随机生成的搜索词错误
我正在研究一个问题,涉及到我生成一定数量的数字(这里称为“Jeff”)并搜索它们,然后记录时间,以便了解使用不同的搜索算法执行任务需要多长时间。在下面,您可以找到我目前所拥有的,不包括binarySearch算法(有效)。我发现的问题是,“搜索值”每次都显示为“未找到” 我使用的代码接受一定数量的数字(用户输入),然后是用户选择的搜索词。我更改了它,这样随机生成的数字将完全填满列表,但这使搜索停止工作。或者看起来就是这样 什么都行 谢谢Java 随机生成的搜索词错误,java,random,Java,Random,我正在研究一个问题,涉及到我生成一定数量的数字(这里称为“Jeff”)并搜索它们,然后记录时间,以便了解使用不同的搜索算法执行任务需要多长时间。在下面,您可以找到我目前所拥有的,不包括binarySearch算法(有效)。我发现的问题是,“搜索值”每次都显示为“未找到” 我使用的代码接受一定数量的数字(用户输入),然后是用户选择的搜索词。我更改了它,这样随机生成的数字将完全填满列表,但这使搜索停止工作。或者看起来就是这样 什么都行 谢谢 public static void main(Strin
public static void main(String[] args) {
long startTime = System.nanoTime();
int Jeff = 20;
List<Integer> intList = new ArrayList<Integer>(Jeff);
int searchValue = 0, index;
int temp;
Random generator = new Random();
System.out.println("Entering " + Jeff + " numbers...");
//Adds unique values up to and through Jeff
while (intList.size() < Jeff) {
Integer next = generator.nextInt(Jeff) + 1;
if (!intList.contains(next))
{
// Done for this iteration
intList.add(next);
}
}
System.out.println("List: " + intList);
//Adding to ArrayList
for (int i = 0; i < intList.size(); i++) {
temp = generator.nextInt(Jeff) + 1;
intList.set(i,temp);
}
System.out.print("Enter a number to search for: ");
searchValue = generator.nextInt(Jeff) + 1;
System.out.println(searchValue);
index = binarySearch(intList, searchValue);
if (index != -1) {
System.out.println("Found at index: " + index);
}
else {
System.out.println("Not Found");
}
long endTime = System.nanoTime();
long duration1 = endTime - startTime;
System.out.println(duration1);
}
static int binarySearch(List<Integer> intList, int find) {
long startTime2 = System.nanoTime();
int start, end, midPt;
start = 0;
end = intList.size() - 1;
while (start <= end) {
midPt = (start + end) / 2;
if (intList.get(midPt) == find) {
long endTime2 = System.nanoTime();
long duration2 = endTime2 - startTime2;
System.out.println(duration2);
return midPt;
} else if (intList.get(midPt) < find) {
start = midPt + 1;
} else {
end = midPt - 1;
}
}
long endTime2 = System.nanoTime();
long duration2 = endTime2 - startTime2;
System.out.println(duration2);
return -1;
}
}
publicstaticvoidmain(字符串[]args){
long startTime=System.nanoTime();
int=20;
List intList=新阵列列表(Jeff);
int searchValue=0,索引;
内部温度;
随机生成器=新随机();
System.out.println(“输入”+Jeff+“数字…”);
//将唯一值添加到Jeff或通过Jeff添加
while(intList.size() while(start您确定searchValue在intList中吗?看起来应该是这样的
searchValue = intList.get(generator.nextInt(intList.size()));
您正在用随机数填充列表。不幸的是,这在二进制搜索中效果不太好
例如,想象一下Jeff=5
。添加随机数后,您的列表可能如下所示:
[3, 1, 5, 2, 4]
现在,如果搜索2,首先查看列表中点处的元素,即5。由于2小于5,然后继续在列表的左半部分查找它(即[3,1]
)。显然,它不在那里,因此搜索将失败
您需要首先对列表进行排序(不幸的是,这使得解决方案变得微不足道),或选择新的搜索策略。对于排序列表上的非平凡搜索,您可以搜索不限于1的整数排序列表。我知道这不是问题所在,但我也可以发布。就是这样!二进制搜索需要对列表中的所有元素进行排序。如果您只是填写用随机数据列出,这种情况不太可能发生。这仍然被称为“未找到”一半的时间。它应该总是被找到。好吧,这是有道理的。为什么它会出现错误的索引,而不管它的顺序是否正确?如果你的搜索代码是正确的,那么它就不应该出现错误的索引,即使列表是随机的。你可能仍然幸运地找到了你的目标值(例如,在我上面的示例中,您可能会找到1),但很可能根本找不到目标值。如果您的索引错误,则搜索实现存在其他问题。