为了账号安全,请及时绑定邮箱和手机立即绑定

关于While,break的问题

关于While,break的问题

慕码人2483693 2019-03-01 11:04:59
请问为什么这段代码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无限循环了
查看完整描述

2 回答

?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

因为当第三次查询的时候 无法匹配到结果因此返回的值-1, indexOf()的第二个参数如果小于0的话将被当作0处理。
因此又开始了第一次的循环。

你可以断点调试下,结果很清楚

查看完整回答
反对 回复 2019-03-01
?
胡说叔叔

TA贡献1804条经验 获得超8个赞

当进入第二次循环的时候进入了else,pos变为13。下次的循环也就是当进入第三次循环的时候还是进入了else。
这次在else里面a变成了16,pos则为-1,下次的循环s1,indexOf(s2, pos)为0,还是进入else了,所以产生了死循环。

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

查看完整回答
反对 回复 2019-03-01
  • 2 回答
  • 0 关注
  • 478 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信