回文测试:调试
Palindrome Test: Debugging
我无法找出代码中的错误。我知道有一个,但我不确定它是什么。我是编码新手,这只是我的第二个学期,我的教授让我们跳到书的末尾学习递归,但是在实验室中,本书分配给作者希望我们实施其他技能,这些技能将在我们没有的章节中学习还没有通过。换句话说,我正在使用我还没有真正学到的东西,所以我没有看到这里的错误。任何能弄清楚我做错了什么并向我解释的人都将不胜感激!谢谢!
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 和 return 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可以任意替换,return一样。请帮忙!谢谢!
这是因为如果长度是2
,你就停止了递归。等到小于2
就停止了。所以改变这个:
if (str.length() <= 2)
return true;
对此:
if (str.length() < 2)
return true;
那么问题是它会在早期的检查中崩溃,所以把它移到方法的开头。所以基本上,任何长度 < 2 的字符串都是回文,您不需要对其进行任何检查;刚刚 return 正确。只有较长的字符串才需要比较第一个和最后一个字符。您的最终代码应如下所示:
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));
}
}
我无法找出代码中的错误。我知道有一个,但我不确定它是什么。我是编码新手,这只是我的第二个学期,我的教授让我们跳到书的末尾学习递归,但是在实验室中,本书分配给作者希望我们实施其他技能,这些技能将在我们没有的章节中学习还没有通过。换句话说,我正在使用我还没有真正学到的东西,所以我没有看到这里的错误。任何能弄清楚我做错了什么并向我解释的人都将不胜感激!谢谢!
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 和 return 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可以任意替换,return一样。请帮忙!谢谢!
这是因为如果长度是2
,你就停止了递归。等到小于2
就停止了。所以改变这个:
if (str.length() <= 2)
return true;
对此:
if (str.length() < 2)
return true;
那么问题是它会在早期的检查中崩溃,所以把它移到方法的开头。所以基本上,任何长度 < 2 的字符串都是回文,您不需要对其进行任何检查;刚刚 return 正确。只有较长的字符串才需要比较第一个和最后一个字符。您的最终代码应如下所示:
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));
}
}