請問為什麼這段程式碼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無限迴圈了
黄舟2017-05-17 10:04:00
因為當第三次查詢的時候 無法配對到結果因此傳回的值-1, indexOf()的第二個參數如果小於0的話將被當作0處理。
因此又開始了第一次的循環。
你可以斷點調試下,結果很清楚
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字串的後半部。