"无法访问的陈述"在布尔递归中

时间:2017-01-27 10:56:40

标签: java string recursion

我需要为一个类编写一个简短的递归程序,检查一个字符串 - t 是否是另一个字符串的转换 - s 。它只需要检查 s 中的每个字符是否也在 t 中。 例如:

  

" sddbs" 不是" sdb"

的转换      

" sddbs" 转换" sddb"。

public static boolean isTrans (String s, String t) 
{
    if (t.indexOf(s.charAt(0)) != -1)
        return true;
    else 
        return false;
    return isTrans(s.substring(1), t);     
}

仍然......代码没有按预期工作。 "无法访问的陈述"在代码的最后一行。

4 个答案:

答案 0 :(得分:2)

原因很简单:

没有办法执行此行:

return isTrans(s.substring(1), t); 

为什么:

你有一个返回 IF 这个条件(t.indexOf(s.charAt(0))!= -1)得到满足而另一个如果没有 ....

答案 1 :(得分:1)

这是因为排除中间的法则。您可以将return视为exit function

public static boolean isTrans (String s, String t) {
    if (condition)
        return true;
    else 
        return false;
    //the condition must have been true or false so the method has already exited.
    return isTrans(s.substring(1), t);     
}

如果condition为真,则为return true,如果为return false,则为$scope.fnModal。否则你会递归调用。 没有其他方式。

答案 2 :(得分:0)

您的最终return语句无法访问,因为您的方法正文包含returnif条件的else语句,从而确保了最后的return语句永远不会到达。

但除此之外,我不明白为什么你需要编写一个递归函数,尽管使用类似方法调用的非递归函数也会做同样的事情:

public static boolean isTrans (String s, String t) 
{
    if (t.indexOf(s) > -1)
        return true;
    else 
        return false;    
}

编辑: 正如@Holger建议的那样,你可以避免不必要的if else并用以下代码替换你的代码:

public static boolean isTrans (String s, String t) 
{
    return (t.indexOf(s) > -1) //returns true or false just like your if else

}

甚至更短:

public static boolean isTrans (String s, String t) 
{
    return t.contains(s); //internally contains() calls indexOf(), similar to what you are doing
}

答案 3 :(得分:0)

根据你的递归方法,一旦输入if条件,它将返回true或false输出。所以你的代码永远不会到达递归语句。 我想建议我使用递归实现转换程序的方法。

import java.util.Scanner;

public class Recursion {

    static int flag;

    public void isTransformation(String str1, String str2) {

        flag = str2.length();
        char ch1[], ch2[];
        ch1 = str1.toCharArray();
        ch2 = str2.toCharArray();

        if (ch1[0] == ch2[0]) {
            flag--;
            if (flag == 0) {
                System.out.println("Transformation");
                return;
            }
            isTransformation(str1.substring(1), str2.substring(1));
        } else
            System.out.println("Not a Transformation");
    }

    public static void main(String args[]) {
        String str1, str2;
        Scanner sc = new Scanner(System.in);
        System.out.print("Enter string 1: ");
        str1 = sc.nextLine();
        System.out.print("Enter string 2: ");
        str2 = sc.nextLine();
        Recursion r = new Recursion();
        if (str1.length() >= str2.length())
            r.isTransformation(str1, str2);
        else
            r.isTransformation(str2, str1);
        sc.close();
    }

}