2013-05-03 70 views
1

目標是讓它計算給定字符串中「xx」的數量。我們會說重疊是允許的,所以「xxx」包含2「xx」。爲什麼不是這個基本的Java程序工作?

http://codingbat.com/prob/p194667 我似乎無法弄清楚爲什麼它不工作

int countXX(String str) { 
     int f = 0; 
     for (int i = 0; i < str.length(); i++){ 
      if (!str.substring(i+1).isEmpty()){ 
       if (str.substring(i) == "x" && str.substring (i+1) == "x") { 
        f++; 
       } 
      } 
     } 
     return f; 
    } 
+0

這是首發者常見的錯誤。小心。 – Lion 2013-05-03 21:51:47

+0

雖然將字符串值與'=='進行比較是錯誤的,但這個問題更多的是關於'substring'錯誤地提取字符的問題。 – rgettman 2013-05-03 21:52:48

+1

我已投票重新提出這個問題;它不是任何常見的「==」與「等於」字符串比較問題的重複。 – rgettman 2013-05-03 21:59:58

回答

4

不要使用==來比較字符串;使用equals()。

int countXX(String str) { 
    int f = 0; 
    for (int i = 0; i < str.length(); i++) { 
     if (!str.substring(i+1).isEmpty()) { 
      if (str.substring(i).equals("x") && str.substring(i+1).equals("x")) { 
       f++; 
      } 
     } 
    } 
    return f; 
} 

我覺得這個代碼仍然有一個問題,當i等於字符串減去1的長度,並嘗試在(i+1)訪問的字符。

+0

.equals()仍然不起作用 – user1399888 2013-05-03 21:52:34

+0

仍然存在濫用'substring'從字符串中提取字符的問題。 – rgettman 2013-05-03 21:53:57

+0

而我 2013-05-03 21:54:47

1

使用字符串的「等於」方法==代替:

int countXX(String str) { 
    int f = 0; 
    for (int i = 0; i < str.length(); i++){ 
    if (!str.substring(i+1).isEmpty()){ 
    if (str.substring(i).equals("x") && str.substring (i+1).equals("x")) { 
    f++;}}} 
    return f; 
    } 
+1

這隻能部分解決問題。 – 2013-05-03 21:53:03

4

substring方法的一個參數就不會在該位置得到的只是這個角色,它通過得到的一切從該位置到字符串的結尾。使用charAt獲取該位置的字符,並將其與==與字符文字'x'進行比較,而不是與String"x"進行比較。

2

理由三:

  1. 子()返回整個字符串(所以從「我」到字符串的結尾開始,而不是隻有一個字母)。
  2. 比較.equals(),而不是==
  3. 「我」 應該結束在str.length() - 1
0
int countXX(String str) { 
    int f = 0; 
    for (int i = 0; i < str.length() - 1; i++){ 
     if (str.substring(i, i + 2).equals("xx")) { 
      f++; 
     } 
    } 
    return f; 
} 
4

不要索引字符使用字符串。

int countXX(String str) { 
    int f = 0; 
    for (int i = 0; i < str.length()-1; i++) { 
     if(str.charAt(i) == 'x' && str.charAt(i+1) == 'x') { 
     f++; 
     } 
    } 
    return f; 
} 
相關問題