2015-07-12 113 views
2
public static boolean work(String str, char ch) 

使用递归找出str是否至少包含一个ch。
如果是,返回true,否则返回false。
修复简单的java递归代码

工作( “whynot”, 'N')返回true
工作( “请”, 'Z')返回false

public static boolean work(String str, char ch){ 
    //base case 
    if (str == null || str.equals("")){ 
     return false; 
    } 

    //recursive case 
    if (ch == str.charAt(0)){ 
     return true; 
    }else { 
     work(str.substring(1), ch); 
    } 
    return false; 
} 

我的代码将正确返回“如果ch是str的第一个字符,则返回true;如果ch在str的任何其他部分,则返回“false”的错误答案。

请解释为什么......我在想这是因为我的最后一次“返回错误”声明否定递归情况下的“真实”,但是当我摆脱了最后一个“返回错误”时我的编译器会抱怨我缺少返回值。

+0

包含(str.substring(1),CH);:

试试这个而不是工作? –

+0

你一直在改变你的功能名称(应该是“工作”,但是“包含”,现在它是“工作”,但你打电话给“包含”里面......)清理那个 – Amit

回答

2

这是因为你没有返回递归调用的结果。你为什么要打电话

public static boolean work(String str, char ch){ 
    //base case 
    if (str == null || str.equals("")){ 
     return false; 
    } 

    //recursive case 
    if (ch == str.charAt(0)){ 
     return true; 
    }else { 
     return work(str.substring(1), ch); 
    } 
} 
+0

非常感谢,工作。但是,我的最后一个返回false语句是否可以覆盖上面的if语句的真实性? – CMSC

+0

现在不是代码已修复。在返回代码之后没有进一步的处理(抛开设置异常处理),并且如果if语句的两个分支都以返回结束,那就足够了。 (P.S. - 你喜欢答案吗?接受它!:-) – Amit

+0

是的,我会的,但该网站不会让我,直到10分钟过去了。非常感谢。 – CMSC