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

Java 如果该方法的参数是以前设置的变量而不是直接输入的,为什么该方法返回不同的值?,java,arrays,Java,Arrays,以下是我课程的相关部分 主要方法的相关部分 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);

以下是我课程的相关部分

主要方法的相关部分

    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);
}
该方法返回4,这意味着5实际上在位于位置4的数组C中。然后我想将它推广到其他数组,所以我创建了变量target、from、to和一个空的int数组,然后我可以使用

found = searchAscending(target, array, from, to);
但是,当我使用此行而不是前一行运行程序时,该方法返回-1(意味着它没有在数组中找到目标5)

为什么它们返回不同的值?在我看来,它们基本上是一样的

编辑:

我发现问题来自于行中的变量
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);

首先,我将假设
createIntArray\u descending()
创建数组
{5,4,3,2,1}
,并且
bubble\u排序(数组)
将其正确排序为
{1,2,3,4,5}

您的主要问题是
from
to
是索引,但是您要从数组中传入值

还要注意的是,
array=C
对代码没有意义,因为它不会复制数组<代码>数组和
C
引用同一数组

要解释它不起作用的原因,请使用调试器并检查代码的值:

int[] C = createIntArray_descending();              // C = {5,4,3,2,1}

array = C;                                          // array = {5,4,3,2,1}
target = 5;
from = array[0];                                    // from = 5
to = array[array.length-1];                         // to = 1
printArray(array);
bubble_sort(array);                                 // array = C = {1,2,3,4,5}
printArray(array);
found = searchAscending(target, array, from, to);   // (5, C, 5, 1) -> found = -1
found = searchAscending(5, C, C[0], C[C.length-1]); // (5, C, 1, 5) -> found = 4
System.out.println(found);

在对
searchAscending()
的两次调用中,您应该使用
from=0
to=4
进行调用。两个电话都不正确。

请提供真实的电话号码。您只是在描述导致失败的代码!
bubble\u sort
方法的作用是什么?这似乎涉及到
array
而不是
C
,可能是问题的根源。当参数显然是索引时,为什么要将值从
传递给参数
<代码>搜索升序(5,C,C[0],C[C.length-1])
应该是
搜索升序(5,C,0,C.length-1)
。请注意,
array=C
不会复制数组,因此调用
bubble\u sort()
之前的
C[0]
可能与调用
bubble\u sort()
之后的
C[0]
不一样,考虑到
array
C
引用的是同一个数组?@Sasang似乎不管它对数组做了什么,都会关心您报告此代码的一些单独问题?因为这并没有真正解决海报声称要观察到的问题。我想是的。但是我相信这是他们遇到的实际问题,因为这两个调用应该,并且在我的测试中,返回相同的东西。显然,我们将不得不等到它全部通过Google Translate:)我很困惑。。to和from应该是索引处的值,它们表示数组中最低的数字,以及排序后最高的数字。编辑:它确实按照你建议的方式工作,但我不清楚它是在做我想做的事情还是在做其他事情?像你现在使用的那样使用二进制搜索,你是在根据索引位置进行搜索。因此,to和from也需要是索引。如果列表中的每一项都与它的索引值相同,那么它可能会偶尔工作。
int[] C = createIntArray_descending();              // C = {5,4,3,2,1}

array = C;                                          // array = {5,4,3,2,1}
target = 5;
from = array[0];                                    // from = 5
to = array[array.length-1];                         // to = 1
printArray(array);
bubble_sort(array);                                 // array = C = {1,2,3,4,5}
printArray(array);
found = searchAscending(target, array, from, to);   // (5, C, 5, 1) -> found = -1
found = searchAscending(5, C, C[0], C[C.length-1]); // (5, C, 1, 5) -> found = 4
System.out.println(found);