2013-09-24 67 views
-1

我有這樣的代碼增量在for循環沒有任何影響

public class CountHi { 
    static public void main(String[] args) { 
     String s1 = "abc.xyz"; 
     System.out.println(s1.length()); 
     System.out.println(xyzThere(s1)); 
    } 
    public static boolean xyzThere(String str) { 
     if (str.length() > 3) 
     { 
      for (int i = 0; i < str.length() - 3; i++) { 
       System.out.println(str.substring(i, i + 4)); 
       if (str.substring(i, i + 4).equals(".xyz")) 
       { 
        return false; 
       } else { 
        return true; 
       } 
      } 
     } 
     return false; 
    } 
} 

我已經從最後一小時左右搜索,但未能找到一個可能的原因是,i++已經成爲死代碼。其實我是編程和Java新手,所以請幫助我。謝謝。

+0

也許你:

 if (str.substring(i, i + 4).equals(".xyz")) { result = false; } else { result true; } 

在方法的末尾添加回報知道,你可以使用str.contains(「。xyz」)來實現相同的目標。 –

+0

你爲什麼說這是死碼?它在你的IDE中顯示嗎?你在哪裏得到那 – SKT

+0

ur代碼將只執行一次,因此它不執行i ++ –

回答

0

if loop總是會去outof的功能,因爲return

你應該使用一個布爾變量,並將返回放在方法的末尾。

聲明一個全局變量:

boolean result = false; 

然後用它YOUT如果循環:已經

return result; 
7

由於您在for循環的第一次迭代中返回,所以i++部分將永遠不會執行。

for(int i = 0; i < str.length()-3;i++) { 
    System.out.println(str.substring(i,i+4)); 

    if(str.substring(i,i+4).equals(".xyz")) { 
     return false; 

    } else { 
     return true; 
    } 
} 

ifelse塊要麼將被執行,他們都立即返回。所以循環沒有機會再次迭代。

我不明白那裏的循環點。如果你只是想檢查擴展名是否爲.xyz,你可以用一個子字符串來完成。

if (s1.substring(s1.lastIndexOf(".")).equals(".xyz")) { 
    // true 
} 

或者,如果你只是想測試一下,如果你的字符串包含.xyz,然後只需使用String#contains()方法:

s1.contains(".xyz"); 
+0

@ Rohit ..實際上我在學習階段並試圖解決這個問題「如果給定的字符串返回true包含「xyz」的外觀,其中xyz不直接以句點(。)開始,因此「xxyz」會計數但「x.xyz」不會。「 – Gaurav

+0

@Gaurav。那麼你可以直接做 - 's1.contains(「。xyz」);'。這將工作正常。如果你有更多的動態部分,那麼你可能需要一個正則表達式。 –

1

而循環,如果條件if(str.substring(i,i+4).equals(".xyz"))是滿意還是不滿意,它會返回任何情況下從循環。而i++永遠不會執行。

1

你需要保持

 System.out.println(str.substring(i,i+4)); 

{}