[英]“unreachable statement” in a boolean 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);
}
而且..代码无法按预期工作。 代码的最后一行中的“ unreachable statement”。
原因很简单:
没有执行此行的方法:
return isTrans(s.substring(1), t);
为什么?:
如果满足此条件(t.indexOf(s.charAt(0))!= -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
为true,则return true
;如果为false,则return false
。 否则,您将递归调用。 没有别的。
您最终return
语句是不可访问,因为你的方法体内含有return
语句既if
和else
条件,因此保证,最后return
声明永远不会达到。
但是除此之外,我不明白为什么你需要编写一个递归函数,尽管使用类似方法调用的非递归函数会做同样的事情:
public static boolean isTrans (String s, String t)
{
if (t.indexOf(s) > -1)
return true;
else
return false;
}
编辑:根据@Holger的建议,您可以避免不必要的情况,并将代码替换为:
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
}
根据您的递归方法,一旦输入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();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.