我在编程II课程中遇到一些问题并遇到了问题,想知道是否有人可以提供帮助?
问题要求用户输入一个字符串,该程序要反转输入字符串然后比较反向原始字符串,这必须以递归方式完成。
到目前为止,我有:
public class question1
{
public static void main(String args[])
{
String input = JOptionPane.showInputDialog(null, "Please enter a sentence to determine if it is a palindrome.");
String backwardsinput = Reverse(input);
System.out.println(backwardsinput);
boolean Palindrome = PalindromeCheck(backwardsinput, input);
if (Palindrome == true)
{
JOptionPane.showMessageDialog(null,"That is a palindrome!");
}
if (Palindrome == false)
{
JOptionPane.showMessageDialog(null,"That is not a palindrome");
}
}
public static String Reverse (String input)
{
if (input.length() <= 1)
return input;
else
{
char x = input.charAt(input.length()-1);
return x+Reverse(input.substring(0,input.length()-1));
}
}
public static boolean PalindromeCheck (String backwardsinput, String input)
{
if(input.length() == 0 || input.length() == 1)
return true;
if(backwardsinput.charAt(0) == input.charAt(input.length()-1))
return PalindromeCheck(backwardsinput.substring(1, backwardsinput.length()-1), input.substring(1, input.length()-1));
else
return false;
}
}
我的问题是,它告诉我一切都是回文,我一遍又一遍地看着它,无法弄清楚原因!
答案 0 :(得分:6)
你正在做两次工作(等等)。
if(backwardsinput.charAt(0) == input.charAt(input.length()-1))
^^^^^^^^^^^^^^^^
应该是
if (backwardsinput.charAt(0) == input.charAt(0))
^
你几乎得到了它: - )
另外,另一种表达方式
if (cond)
return something;
else
return false;
是
return cond && something;
因此你的最后一行可以写成
return backwardsinput.charAt(0) == input.charAt(0) &&
palindromeCheck(backwardsinput.substring(1, backwardsinput.length() - 1),
input.substring(1, input.length() - 1));
相关问题/答案:
答案 1 :(得分:3)
if(backwardsinput.charAt(0) == input.charAt(input.length()-1))
这不起作用。你想要backwardsinput.charAt(0) == input.charAt(0)
。因为你扭转了它。
当我调试这样的东西时,我倾向于拆开所有复合语句,所以
if(backwardsinput.charAt(0) == input.charAt(input.length()-1))
会变成
char bc = backwardinput.charAt(0);
char ic = input.charAt(input.length()-1);
System.println(bc);
System.println(ic);
if (bc == ic) {
当我们试图在一个表达式中放入过多时,我们都会犯下愚蠢的错误,所以这些都是开始寻找逻辑错误的好地方。
答案 2 :(得分:2)
您正在反转字符串,然后检查字符串是否与此相反。即它测试字符串被正确反转。
当你能做的时候不是反转字符串然后只检查一个字符串匹配它自己(速率比它反向)向后。