为什么while循环已满足简单终止条件仍不退出,反复进入for循环?
问题原因
while循环的条件校验只会在每次完整执行完内部包裹的全部代码后触发,不会中断正在运行的内部for循环。你把for循环完全嵌套在while内部,哪怕for执行中途把firstX设为1,for循环还是会遍历完所有剩余字符,才会回到while做条件判断。
你测试用的字符串axxbb的索引1、2位置都是x:for遍历到索引1的x时firstX变为1,遍历继续走到索引2时又匹配到x,firstX就会被加到2,等整个for循环跑完回到while校验时,才会触发退出逻辑,这就是你调试时观察到的现象。
修复方案
方案1:简化逻辑,直接实现需求(推荐)
不需要嵌套两层循环,找到第一个x后直接判断后一位即可:
String str = "axxbb"; char[] charArray = str.toCharArray(); boolean firstXHasFollowX = false; for (int i = 0; i < charArray.length; i++) { if (charArray[i] == 'x') { // 找到第一个x后判断后一位是否存在且为x if (i < charArray.length - 1 && charArray[i+1] == 'x') { firstXHasFollowX = true; } break; // 找到第一个x就终止遍历 } }
方案2:保留原有变量定义,仅新增break跳出for循环
如果要保持你原来的变量设计,只要在找到第一个x时跳出for循环即可:
String str = "axxbb"; char[] charArray = str.toCharArray(); int firstX = 0; int secondX = 0; while (firstX < 1) { for (int i = 0; i < charArray.length - 1; i++) { if (charArray[i] == 'x') { firstX = firstX + 1; secondX = i + 1; break; // 新增此行,找到第一个x就跳出for循环,不会继续遍历后续字符 } } }
内容的提问来源于stack exchange,提问作者JavaIsElite
相关产品推荐
相关产品推荐

