簡體   English   中英

如何在沒有 break 語句的情況下鍵入 BinarySearch 方法 while-loop?

[英]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 和 continuereddit 討論

這是姊妹網站上關於軟件工程的一個問題

至於為什么你的循環在沒有 break 語句的情況下不退出是如果找到了鍵, lo的值不會改變。 所以不, lo的值不一定大於high

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM