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無限循環了
問題解答
回答1:因為當第三次查詢的時候 無法匹配到結果因此返回的值-1, indexOf()的第二個參數如果小于0的話將被當作0處理。因此又開始了第一次的循環。
你可以斷點調試下,結果很清楚
回答2:當進入第二次循環的時候進入了else,pos變為13。下次的循環也就是當進入第三次循環的時候還是進入了else。這次在else里面a變成了16,pos則為-1,下次的循環s1,indexOf(s2, pos)為0,還是進入else了,所以產生了死循環。
我覺得你需要每次在else里面不要改變pos,而是要直接截s1字符串的后半部分。
