java - 關(guān)于While,break的問題
問題描述
請問為什么這段代碼while循環(huán)內(nèi)一旦進入了else后面部分,之后的while循環(huán)就無法再進入前半個分支了?我看if 后面的條件應(yīng)該是滿足的啊,運行結(jié)果由于進入不了第一個循環(huán)就沒法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++;} }}
}運行結(jié)果就是-1 10 13 -1 10 13無限循環(huán)了
問題解答
回答1:因為當?shù)谌尾樵兊臅r候 無法匹配到結(jié)果因此返回的值-1, indexOf()的第二個參數(shù)如果小于0的話將被當作0處理。因此又開始了第一次的循環(huán)。
你可以斷點調(diào)試下,結(jié)果很清楚
回答2:當進入第二次循環(huán)的時候進入了else,pos變?yōu)?3。下次的循環(huán)也就是當進入第三次循環(huán)的時候還是進入了else。這次在else里面a變成了16,pos則為-1,下次的循環(huán)s1,indexOf(s2, pos)為0,還是進入else了,所以產(chǎn)生了死循環(huán)。
我覺得你需要每次在else里面不要改變pos,而是要直接截s1字符串的后半部分。
