You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:49:49