繁体   English   中英

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

[英]Why does the method return a different value if its arguments are previously set variables rather than inputed directly?

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

主要方法的相关部分

    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,这意味着实际上在位置4的数组C中有5。我然后想将其推广到其他数组,因此我创建了变量target,from,to和一个空的int数组,然后我可以设置为我想将方法​​应用于的任何数组,使用

found = searchAscending(target, array, from, to);

但是,当我使用这一行而不是上一行运行程序时,该方法返回-1(表示它未在数组中找到目标5)。

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

编辑:

我发现问题出在往返的变量, found = searchAscending(target, array, array[0], array[array.length-1])的行found = searchAscending(target, array, array[0], array[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_descending()创建数组{5,4,3,2,1}bubble_sort(array)正确排序为{1,2,3,4,5}

您的主要问题是fromto索引 ,但是您从数组中传递了

还要注意的是array = C是毫无意义的代码,因为它数组复制。 arrayC引用相同的数组。

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

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 = 0to = 4进行调用。 两个电话都不正确。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM