[英]How to type a BinarySearch method while-loop without break statement?
我剛剛完成了簡單的 BinarySearch 算法的學習,但讓我感到困擾的一件事是,我被告知 break(和 continue)語句在 Java 中通常是多余的,並且您可以在沒有它們的情況下使用大多數 while 循環。 但我無法弄清楚如何從下面的 BinarySearch while-loop 中擺脫下擺:-
public static void BinarySearch(int[] list, int key){
int lo = 0;
int hi = list.length-1;
int mid = 0;
while(lo<=hi){
mid = lo + (hi-lo) / 2;
if(key<list[mid])
hi = mid-1;
else if(key>list[mid])
lo = mid+1;
else {
System.out.println("Key is found at index = " + mid);
break;
}
if(lo>hi){
System.out.println("Key doesn't exist in the list");
}
}
問題 1:如果我不包含 break 語句,為什么循環會一直繼續下去? 變量“lo”最終不應該大於“hi”嗎? 為什么最后一個 if-conditional 可以看到,而 while-loop-conditional 卻看不到?
問題 2:如何在不需要 break 語句的情況下輸入 while 循環?
基本策略是在循環中添加額外的條件,並在循環內的代碼中設置和使用這些條件。
例如,對於上面的循環:
int keyIndex = -1;
. . .
while ( (lo<=hi) && (keyIndex == -1) ) {
. . .
else {
System.out.println("Key is found at index = " + mid);
keyIndex = mid; // <<<
}
. . .
}
然而,對於諸如此類的循環使用 break 語句被許多開發人員認為是一種可接受的編程實踐。
這是關於使用 break 和 continue的reddit 討論。
這是姊妹網站上關於軟件工程的一個問題。
至於為什么你的循環在沒有 break 語句的情況下不退出是如果找到了鍵, lo的值不會改變。 所以不, lo的值不一定大於high 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.