2016-02-27 80 views
0

我必须使用递归来实现布尔方法。没有任何for循环是允许的。我写的代码给出了正确的答案。但是,这是不正确的。有什么好的建议吗?谢谢!字符串计数的Java布尔递归方法

public class RecusiveMethod { 

    public static void main (String[] args) { 
     System.out.println("True: " + isWordCountsRight("ccowcow", "cow", 2)); 
     System.out.println("True: " + isWordCountsRight("kayakayakaakayak", "kayak", 3)); 
    } 


    public static boolean isWordCountsRight(String str, String word, int n) { 
     if (n == 0) return true; 

     if (str.substring(0, word.length()).equals(word)) { 
      return isWordCountsRight(str.substring(1), word, n - 1); 
     } 

     return isWordCountsRight(str.substring(1), word, n); 
    } 
} 
+0

什么是预期的结果? –

+0

在第二种情况下你期望2或3吗?匹配重叠还是不匹配? – blafasel

+0

请注意,你永远不会返回'false' - 猜这就是你的问题 – MartinS

回答

1

你也可以做到这一点,像这样:

public static boolean isWordCountsRight(String str, String word, int n) { 
if (n == 0) return true; 

int index = str.indexOf(word); 

if (index != -1) { 
    return isWordCountsRight(str.substring(index+1), word, n - 1); 
} else { 
    return false; 
} 
+0

这没有重叠。第二种情况你会得到2。 – blafasel

+0

你说得对,我试图保存潜在的冗余步骤太贪婪。但这是一个简单的修复,只需将word.length()替换为1 – Maljam

+0

感谢您的所有建议! – xh2000