return语句没有停止代码java

时间:2017-04-10 04:24:17

标签: java recursion

我试图检查一个单词是否是回文,我正在使用递归,我不知道我做错了什么但是当我到达基本情况时,该方法继续调用最终所有单词返回false。任何人都可以帮我找到错误吗?谢谢:/

public static void main(String[] args)
{
    System.out.print("Enter a word: ");
    Scanner sc = new Scanner(System.in);
    String isPalindrome = sc.next();
    String regex = "[.!? ]";
    isPalindrome.split(regex);
    if(testPalindrome(isPalindrome)==true)
    {
        System.out.print(isPalindrome+" is a palindrome.");
    }
    else
    {
        System.out.print(isPalindrome+" is not a palindrome.");
    }
}
public static boolean testPalindrome(String word)
{
    if(word.charAt(0)==word.charAt(word.length()-1))
    {
        if(word.length()==1)
        {
            return true;
        }
            word = word.substring(1, (word.length()-1));
            testPalindrome(word);
    }
    return false;
}

3 个答案:

答案 0 :(得分:5)

您需要返回递归调用的结果。现在,你递归地调用函数是的,但最终,因为你在进行递归调用时没有从函数返回,所以执行流程离开了外if语句并移到{{1即使你递归并且该行的某个地方的递归返回return false;

true

编辑:superhawk610对你的退出条件也是正确的。它仅对字符串中的奇数个字符有效。您应该使用类似public static boolean testPalindrome(String word) { if(word.charAt(0)==word.charAt(word.length()-1)) { if(word.length()==1) { return true; } word = word.substring(1, (word.length()-1)); return testPalindrome(word); } return false; } 的内容来捕捉奇数和偶数情况。这意味着最终的代码是:

if (word.length() <= 1)

答案 1 :(得分:1)

看起来它可以使用奇数长度的单词而不是长度均匀的单词。从

更改您的测试声明
if(word.length() == 1)

if(word.length() < 2)

如果你已经减少到1个字符(奇数长度字的中间)或0(偶数长度字的“中间”),这将结束递归。

答案 2 :(得分:0)

假设您不需要检查if中的true,因为该方法会返回boolean

System.out.print("Enter a word: ");
        Scanner sc = new Scanner(System.in);
        String isPalindrome = sc.next();
        String regex = "[.!? ]";
        isPalindrome.split(regex);
        if(testPalindrome(isPalindrome))
        {
            System.out.print(isPalindrome+" is a palindrome.");
        }
        else
        {
            System.out.print(isPalindrome+" is not a palindrome.");
        }

同样testPalindrome()方法应该像递归一样工作。

public static boolean testPalindrome(String word)
{
    if(word.charAt(0)==word.charAt(word.length()-1))
    {
        if(word.length()==1)
        {
            return true;
        }
            word = word.substring(1, (word.length()-1));
            return testPalindrome(word);
    }
    return false;
}