我可能只是累了,不再正常思考,但为什么“13”只在这里打印一次? (intelliJ告诉我“i == 11 | i == 13
”总是如此,但我不知道这有多大意义)
for (int i = 0; i < 14; i++) {
System.out.println(i);
String line = clientReader.readLine();
int length = line.length();
if (i == 0 || i == 5 || i == 6) {
line = line.substring(7, length - 6);
} else if (i == 1 || i == 2 || i == 3 || i == 4 || i == 8 || i == 9 || i == 10 || i == 12) {
line = line.substring(8, length - 7);
} else if (i == 7) {
line = line.substring(9, length - 8);
} else if (i == 11 || i == 13) {
line = line.substring(10, length - 9);
}
data[i] = line;
System.out.println(i);
}
P.S。 line.substring不会出错,如果我在最后一个else的末尾添加System.out.println(line),如果它打印正确的东西。
答案 0 :(得分:2)
最后一个else if
始终为true,因为您的循环控制变量从0
开始运行到13
,并且在最后else if
之前检查过的唯一两个数字} 11
和13
因此,如果以上条件均不属实,那么i
将为11
或13
因此,为什么IntelliJ足够聪明才能知道它总是正确的,因此当不满足上述条件时,控制将始终绑定在最后else if
块内。
如果您将循环条件增加到i < 15
或更高级别,那么IntelliJ将不会状态else if (i == 11 || i == 13)
始终为真,因为i
可能是14
。< / p>