2014-04-09 101 views
4

函數countHi計算給定字符串中「hi」的數量。如果用「abc hi ho」作爲參數調用countHi,則i在循環之前首先設置爲4。我在第一個循環內重置爲-1。第1次循環後,條件(i!= -1)爲假,整個條件語句爲假。我期望例程會退出循環,但它不會,我不明白爲什麼。爲什麼Java For條件語句似乎被忽略?

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); 
    } 

版本更經濟,但是這將是很好理解爲什麼第一個版本產生了意想不到的結果。

回答

8

i可能成爲-1

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

i++ 
for循環更新表達

將其帶回0被檢查的條件之前。