簡體   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