Java循环中13仅打印一次问题求助:IntelliJ提示条件恒为真
问题分析:为什么13只打印一次,以及IntelliJ的条件提示
先解释IntelliJ的提示:"i == 11 | i == 13"始终为真
咱们把你的分支条件逐个拆解看覆盖的i值:
- 第一个
if分支:覆盖了i = 0, 5, 6 - 第二个
else if分支:覆盖了i = 1, 2, 3, 4, 8, 9, 10, 12 - 第三个
else if分支:覆盖了i = 7
算下来,i从0到13一共14个值,前面三个分支已经覆盖了12个,剩下的就只有11和13了!所以当程序走到最后一个else if时,i必然是这两个值之一,这个条件相当于“废话”——永远成立。IntelliJ的静态代码分析刚好捕捉到了这一点,所以给你提示。你完全可以把最后这个分支改成else,逻辑完全不变,代码还更简洁。
为什么13只打印一次?
从代码逻辑来说,每个循环迭代都会执行两次System.out.println(i),包括最后一次i=13的循环——毕竟你说line.substring没报错,还能在最后分支里打印出正确的line内容,说明整个循环体都完整执行了。
可能的原因集中在输出显示层面:
- 控制台视觉混淆:两次打印的13是连续的,可能在控制台里挨在一起,看起来像只打印了一次。你可以把两次打印改成带标识的内容,比如:
这样就能清晰区分两次输出了。System.out.println("[第一次打印] i = " + i); // ... 中间代码 ... System.out.println("[第二次打印] i = " + i); - 输出缓冲延迟:
System.out默认是行缓冲,虽然大部分时候会自动换行刷新,但极端情况下可能有延迟。你可以在循环结束后加一句System.out.flush()强制刷新输出流,确保所有内容都显示出来。 - 控制台滚动/折叠问题:IntelliJ的控制台如果输出内容多,可能会自动折叠或者滚动到新内容,你可以往上翻找一下历史输出,看看第二次打印的13是不是藏在上面。
另外,顺便确认下data数组的长度是不是14——如果数组长度小于14,i=13时data[i] = line会抛出数组越界异常,但你说没报错,应该没问题,不过检查一下更放心。
内容的提问来源于stack exchange,提问作者Coen Visser
相关产品推荐
相关产品推荐

