【问题标题】:Palindrome Test: Debugging回文测试:调试
【发布时间】:2015-02-09 20:43:29
【问题描述】:

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

    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 方法的调用。现在这段代码几乎适用于我输入的所有短语。但是,当我输入这个短语时: “我强调的甜点” 它会将字母 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 可以替换为任何内容,并且返回相同。请帮忙!谢谢!

【问题讨论】:

    标签: java debugging recursion palindrome


    【解决方案1】:

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

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

    到这里:

    if (str.length() < 2)
        return 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));
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-25
      • 2017-07-22
      • 2017-05-09
      • 1970-01-01
      • 1970-01-01
      • 2018-07-30
      • 2017-03-19
      • 2018-06-16
      相关资源
      最近更新 更多