2016-12-16 250 views
-2

返回true,如果字符串「貓」和「狗」的出現給定的字符串中的相同的次數。遍歷字符串數組

貓狗( 「貓狗」)→真

貓狗( 「catcat」)→假

貓狗( 「1cat1cadodog」)→真

public boolean catDog(String str) { 
    int countCat=0; 
    int countDog=0; 

    for(int i=0;i<str.length()-3;i++){ 
    if(str.substring(i).startsWith("cat")){ 
     countCat++; 
    } 
    if(str.substring(i).startsWith("dog")){ 
     countDog++; 
    } 
    } 
    if(countCat==countDog){ 
    return true; 
    } 
    else{ 
    return false; 
    } 
} 

我無法寫這個方法。有人知道爲什麼我的代碼無法正常工作嗎? 編輯:代碼編譯,但它會給出錯誤的輸出。例如,如果我把「貓狗」,它返回false。

+0

你檢查,你重複的次數正確的金額是多少?因爲你目前沒有。 – Tom

+1

我明白了,我明白了。我正在使用子字符串(i,i + 3),並且在開始使用startsWith時忘記更改迭代步驟的長度。 – DerDieDasEhochWas

回答

1

與您發佈,其因爲你的for循環應該是for(int i=0;i<str.length();i++){的例子。你也可以使用str.length() - 1和str.length() - 2來獲得正確的結果。 -3會給出錯誤的結果。小例子:字符串是catdog1dog。結果應該是錯誤的。讓我們看看將與-3創建的字符串:

catdog1dog 
atdog1dog 
tdog1dog 
dog1dog 
og1dog 
g1dog 
1dog 

,你可以用-3的最後一個子是錯誤的,因此結果過於看。這是因爲如果您查看子字符串,您將看到開始字符爲0而不是1,因此str.length()-1是字符串中的最後一個字符。對不起,如果我的解釋不是那麼好

+0

謝謝,我之前正在使用substring(i,i + 3),並且忘記更改它。 – DerDieDasEhochWas

0

雖然你的問題可以通過其他策略來解決,我想你可能只減去2至str.length()而不是3

我希望有用!

0

我會做這樣的事情:

public boolean catDog(String str){ 
    return countWords(str, "cat") == countWords(str, "dog"); 
} 


private int countWords(String original, String word){ 
    int counter = 0; 
    boolean searching = true; 
    while(searching){ 
     if(original.indexOf(word) >= 0){ 
      counter++; 
      original = original.substring(original.indexOf(word) + word.length()); 
     } 
     else{ 
      searching = false; 
     } 
    } 
    return counter; 
}