2016-12-16 201 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; 
}