【问题标题】:My code seems to be skipping the return statement我的代码似乎跳过了 return 语句
【发布时间】:2021-08-21 13:57:06
【问题描述】:

我正在用 Java 编写一个回文检查布尔函数 - 我正在学习递归。当单词被剥离到最后(内部)一两个字母并且程序应该检查这两个字母是否相同时,它似乎不起作用 - 函数总是返回 false。 奇怪的是,当程序返回时,它只是继续工作——我知道这一点,因为它继续打印我的检查点(打印语句)。 print 函数被执行,但后面的 return 语句被忽略。即使函数应该返回真(=这个词是回文),最后它仍然返回假。

我已经尝试过 if、if-else 语句、return 语句的不同位置的组合,函数 isPalindrome 与 main 函数正常工作,并且我已经尝试了很多使用打印函数的调试。

我的代码:

public static boolean isPalindrome(String word) {
    int wlength = word.length();
    System.out.printf("wlength = %d%n", wlength);
    
    if (wlength == 1) {
        System.out.printf("wlength == 1!!!!%n");
        return true;

    } else if (wlength == 2) {
        System.out.printf("wlength == 2%n");
        String first = word.substring(0, 1);
        String last = word.substring(1, 2);
        if (first == last) {
            return true;
        } else {
            return false;
        }
    }

    String first = word.substring(0, 1);
    String last = word.substring(wlength-1, wlength);
    System.out.printf("first = %s, last = %s %n", first, last);
    if (first.compareTo(last) == 0) {
        System.out.printf("first == last%n");
        String inner= word.substring(1, wlength-1);
        System.out.printf("new Word = %s RECURSION%n", inner);
        isPalindrome(inner);
    } 
    System.out.println("END");
    return false;
    
}

谢谢!

【问题讨论】:

  • prva 未定义。
  • 您忽略了内部调用的返回值。所有长度大于 2 的调用都在您最后一次 println 处执行并返回 false。
  • 您能否提供一个导致问题的示例输入词并发布相应的控制台输出,否则任何人都很难诊断出发生了什么。可以说它绝对不会“忽略”return 声明!
  • isPalindrome(inner); -> return isPalindrome(inner);
  • 你也试过使用调试器来单步调试代码,它比打印语句更有效。

标签: java recursion return


【解决方案1】:
if (prva.compareTo(last) == 0) {
    System.out.printf("first == last%n");
    String inner= word.substring(1, wlength-1);
    System.out.printf("new Word = %s RECURSION%n", inner);
    isPalindrome(inner); // <--- here
} 

您还没有捕获上面显示的最后一行的返回值。

【讨论】:

    猜你喜欢
    • 2022-06-10
    • 2015-07-11
    • 2017-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-20
    相关资源
    最近更新 更多