久久r热视频,国产午夜精品一区二区三区视频,亚洲精品自拍偷拍,欧美日韩精品二区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

java - 關(guān)于While,break的問題

瀏覽:133日期:2023-12-10 13:03:01

問題描述

請(qǐng)問為什么這段代碼while循環(huán)內(nèi)一旦進(jìn)入了else后面部分,之后的while循環(huán)就無(wú)法再進(jìn)入前半個(gè)分支了?我看if 后面的條件應(yīng)該是滿足的啊,運(yùn)行結(jié)果由于進(jìn)入不了第一個(gè)循環(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++;} }}

}運(yùn)行結(jié)果就是-1 10 13 -1 10 13無(wú)限循環(huán)了

問題解答

回答1:

因?yàn)楫?dāng)?shù)谌尾樵兊臅r(shí)候 無(wú)法匹配到結(jié)果因此返回的值-1, indexOf()的第二個(gè)參數(shù)如果小于0的話將被當(dāng)作0處理。因此又開始了第一次的循環(huán)。

你可以斷點(diǎn)調(diào)試下,結(jié)果很清楚

回答2:

當(dāng)進(jìn)入第二次循環(huán)的時(shí)候進(jìn)入了else,pos變?yōu)?3。下次的循環(huán)也就是當(dāng)進(jìn)入第三次循環(huán)的時(shí)候還是進(jìn)入了else。這次在else里面a變成了16,pos則為-1,下次的循環(huán)s1,indexOf(s2, pos)為0,還是進(jìn)入else了,所以產(chǎn)生了死循環(huán)。

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

標(biāo)簽: java
主站蜘蛛池模板: 丹东市| 佛坪县| 金塔县| 连云港市| 永靖县| 通道| 睢宁县| 象山县| 平潭县| 凤城市| 琼结县| 新源县| 五莲县| 广灵县| 越西县| 陆丰市| 丰原市| 德保县| 兰西县| 蓝田县| 双辽市| 金寨县| 长顺县| 宜川县| 龙游县| 广汉市| 广西| 伊通| 疏勒县| 班玛县| 铜川市| 湟中县| 汉源县| 武鸣县| 红安县| 中山市| 登封市| 巴马| 安徽省| 易门县| 阜南县|