java - 回文测试 : Debugging

标签 java debugging recursion palindrome

我无法找出代码中的错误。我知道有一个,但我不确定它是什么。我是编码新手,这只是我的第二个学期,我的教授让我们跳到书的末尾学习递归,但是在实验室中,本书分配给作者希望我们实现其他技能,这些技能将在我们没有的章节中学习还没有通过。换句话说,我正在使用我还没有真正学到的东西,所以我没有看到这里的错误。任何能弄清楚我做错了什么并向我解释的人都将不胜感激!谢谢!

    if (palTest(s.toLowerCase().replaceAll("\\W","")))
        System.out.println("\nYour phrase is a palindrome!");

    public static boolean palTest(String str)
    {

        char first = str.charAt(0);
        char last = str.charAt(str.length() - 1);


        System.out.println(str);
        System.out.println(first + " --- " + last);
        System.out.println("----------------\n");


        if (str.length() <= 2)
            return true;
        else if (first != last)
            return false;
        else
            return palTest(str.substring(1, str.length()-1));
    }

if 语句是我对 palTest 方法的调用。现在这段代码几乎适用于我输入的所有短语。但是,当我输入这个短语时: “Dessertsm I stressed” 它将比较字母 m 和最后的字母 i 并返回 true 并说这个短语是一个回文。

我放入了一些 System.out.println 语句,这样我就可以准确地看到发生了什么,这是它打印出来时的样子。

Please enter a phrase you wish to test to discover if it it a palindrome: 
dessertsm i stressed

dessertsmistressed
d --- d
----------------

essertsmistresse
e --- e
----------------

ssertsmistress
s --- s
----------------

sertsmistres
s --- s
----------------

ertsmistre
e --- e
----------------

rtsmistr
r --- r
----------------

tsmist
t --- t
----------------

smis
s --- s
----------------

mi
m --- i
----------------


Your phrase is a palindrome!

字母 m 可以用任何东西代替,它返回相同的东西。请帮忙!谢谢!

最佳答案

这是因为如果长度为 2,则停止递归。等到小于 2 时停止。所以改变这个:

if (str.length() <= 2)
    return true;

为此:

if (str.length() < 2)
    return true;

问题是它会在早期的检查中崩溃,所以将它移到方法的开头。所以基本上,任何长度 < 2 的字符串都是回文,您不需要对其进行任何检查;只需返回 true。只有较长的字符串才需要比较第一个和最后一个字符。您的最终代码应如下所示:

public static boolean palTest(String str)
{
    if (str.length() < 2) return true;

    char first = str.charAt(0);
    char last = str.charAt(str.length() - 1);

    if (first != last){
        return false;
    } else{
        return palTest(str.substring(1, str.length()-1));
    }
}

关于java - 回文测试 : Debugging,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28418970/

相关文章:

java - 如何在 ant 构建过程中包含外部类文件

java - 保存 jdbc 响应并迭代到下一个请求

java - 如何在IDEA中使用-source

java - 如何将 JSP var 传递给运行时执行程序?

algorithm - 递归查找一组给定的不同整数的所有子集

php - PHP解析/语法错误;以及如何解决它们

c++ - gdb 错误消息 : DW_OP_reg, DW_OP_piece 和 DW_OP_bit_piece

python - PyQt5 QML 调试已启用,qmljsdebugger 选项不执行任何操作

javascript - 停止 jquery onChange 递归迭代

python - Python中列表的递归排序函数