gpt4 book ai didi

java - 如果方法的参数是先前设置的变量而不是直接输入,为什么该方法会返回不同的值?

转载 作者:行者123 更新时间:2023-12-02 13:17:36 25 4
gpt4 key购买 nike

以下是我的程序的相关部分。

main方法相关部分

    int[] C = createIntArray_descending();
int found, target, from, to;
int[] array;

array = C;
target = 5;
from = array[0];
to = array[array.length-1];
printArray(array);
bubble_sort(array);
printArray(array);
found = searchAscending(target, array, from, to);
found = searchAscending(5, C, C[0], C[C.length-1]);
System.out.println(found);

方法searchAscending(),一种二分查找方法

 public static int searchAscending(int target, int[] array, int from, int to) {
int mid = (from + to)/2;
if (to<from)
return -1;
else if (target == array[mid])
return mid;
else if (to == from)
return -1;
else if (target < array[mid])
return searchAscending(target, array, from, mid-1);
else
return searchAscending(target, array, mid+1, to);
}

当我使用运行程序时

found = searchAscending(5, C, C[0], C[C.length-1]);

该方法返回 4,这意味着 5 实际上在数组 C 中,在位置 4 处找到。然后我想将其推广到其他数组,因此我创建了变量 target、from、to 和一个空 int 数组,其中然后我可以使用

设置为我想要应用该方法的任何数组
found = searchAscending(target, array, from, to);

但是,当我使用这一行而不是前一行运行程序时,该方法返回 -1(意味着它在数组中没有找到目标 5)。

为什么他们返回不同的值?对我来说它们本质上是一样的。

编辑:

我发现问题出在变量 from 和 to 上,该行 found = searchAscending(目标、数组、数组[0]、数组[array.length-1])有效,因此值已成功传递,但 (target, array, from, array[array.length-1]) 给出 ArrayIndexOutOfBoundsException....

最佳答案

所以无论我如何调用它,我都会得到相同的答案。不过,我确实注意到如何调用二分搜索函数 searchAscending 存在问题。对于往返,您都使用索引处的值而不是索引本身来调用它。尝试一下你的主要内容:

int[] C = createIntArray_descending();
int found, target, from, to;
int[] array;

array = C;
target = 5;
from = 0;
to = array.length-1;
printArray(array);
bubble_sort(array);
printArray(array);

found = searchAscending(target, array, from, to);
System.out.println(found);
found = searchAscending(5, C, 0, C.length-1);
System.out.println(found);

关于java - 如果方法的参数是先前设置的变量而不是直接输入,为什么该方法会返回不同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43703006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com