【发布时间】: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); -
你也试过使用调试器来单步调试代码,它比打印语句更有效。