首頁  >  問答  >  主體

java - 關於While,break的問題

請問為什麼這段程式碼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無限迴圈了

習慣沉默習慣沉默2713 天前575

全部回覆(2)我來回復

  • 黄舟

    黄舟2017-05-17 10:04:00

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

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

    回覆
    0
  • PHP中文网

    PHP中文网2017-05-17 10:04:00

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

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

    回覆
    0
  • 取消回覆