[英]Why does this output 0.0 0.0 0.0 0.0 rather than the execute method's return calculations?
[英]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}
。
您的主要問題是from
和to
是索引 ,但是您從數組中傳遞了值 。
還要注意的是array = C
是毫無意義的代碼,因為它不數組復制。 array
和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
進行調用。 兩個電話都不正確。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.