我需要为一个类编写一个简短的递归程序,检查一个字符串 - 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);
}
仍然......代码没有按预期工作。 "无法访问的陈述"在代码的最后一行。
答案 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
语句无法访问,因为您的方法正文包含return
和if
条件的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();
}
}