java - 關於While,break的問題
習慣沉默
習慣沉默 2017-05-17 10:02:00
0
2
568

請問為什麼這段程式碼while循環內一旦進入了else後面部分,之後的while循環就無法再進入前半個分支了?我看if 後面的條件應該是滿足的啊,運行結果由於進入不了第一個迴圈就沒辦法break了。求大神指教:

public class SearchString {

public static void main(String[] args) {
    String s1 = "abcaaaaaaaabcabc";
    String s2 = "abc";
    int len = s2.length();
    int pos = 0;
    int count = 0;
    while (true) {
        if (s1.indexOf(s2, pos) == -1) {
            System.out.println("Search Over, result count=" + count);
            break;
        } else {
            System.out.println("Position" + (count + 1) + " is " + pos);
            int a = pos + len;
            pos = s1.indexOf(s2, a);
            count++;
        }
    }
}

}
運行結果就是-1 10 13 -1 10 13無限迴圈了

習慣沉默
習慣沉默

全部回覆(2)
黄舟

因為當第三次查詢的時候 無法配對到結果因此傳回的值-1, indexOf()的第二個參數如果小於0的話將被當作0處理。
因此又開始了第一次的循環。

你可以斷點調試下,結果很清楚

洪涛

當進入第二次循環的時候進入了else,pos變成13。下次的循環也就是進入第三次循環的時候還是進入了else。
這次在else裡面a變成了16,pos則為-1,下次的循環s1,indexOf(s2, pos)為0,還是進入else了,所以產生了死循環。

我覺得你需要每次在else裡面不要改變pos,而是要直接截出s1字串的後半部。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!