为什么Java For条件语句似乎被忽略了?

时间:2014-04-09 17:16:56

标签: java

函数countHi计算" hi"在给定的字符串中。如果用" abc hi ho"来调用countHi。作为参数,在循环之前,i首先设置为4。我在第一个循环中重置为-1。第1次循环后,条件(i!= -1)为false,整个条件语句为false。我希望例程会退出循环,但它没有,我不明白为什么。

public static int countHi(String str) {
        int cnt = 0;
        int i = str.indexOf("hi");
        for (; (i < str.length()) && (i != -1); i++) {
            cnt++;
            i = str.indexOf("hi", i + 1);
        }
        return cnt;
    }

在以下版本中,条件正确退出循环:

for (; i!=-1;) {
        cnt++;
        i = str.indexOf("hi", i + 1);
    }

修订更经济,但理解为什么第一个版本产生意外结果会很好。

1 个答案:

答案 0 :(得分:8)

i可能会从

成为-1
i = str.indexOf("hi", i + 1);

但是

i++
for循环更新表达式中的

将在检查条件之前将其恢复为0。