我正在学习Java。我正在构建这个Palindrome识别器并使用带有字符的两个数组,我想我已经找到了一个很好的实现,我已经找到了其他的东西,但是我突然想知道它为什么会这样做。到目前为止没有按预期工作。发生了什么:
我基本上需要一些帮助来了解我的代码在哪里错了。谢谢!
/*
"A Santa at Nasa" is an example of palindrome.
*/
import java.util.Scanner;
public class Palindrome
{
public static void main (String[] args)
{
boolean isPalindrome = false;
Scanner kb = new Scanner(System.in);
System.out.println("Enter a string:");
String userInput = kb.nextLine();
userInput = userInput.trim().replaceAll(" ", "").toLowerCase();
char[] array = new char[userInput.length()];
char[] reverseArray = new char[userInput.length()];
int i = 0;
int j = userInput.length();
do {
i++;
j--;
array[i] = userInput.charAt(i);
reverseArray[j] = userInput.charAt(j);
if (array[i] != reverseArray[j])
{
isPalindrome = false;
}
else
{
isPalindrome = true;
}
} while (j > i);
if(isPalindrome)
{
System.out.println("It's a palindrome.");
}
else
{
System.out.println("Not a palindrome.");
}
}
}
答案 0 :(得分:4)
一旦你确定输入不是回文,你应该结束测试。
目前,您的算法可以改变主意!
你也在过早地增加我。
答案 1 :(得分:2)
问题在于,您必须在输入数组的第一个元素之前启动,因为您在循环开始时执行int i = -1;
:
while (j > i && !isPalindrome);
此外,循环的退出条件可以改进,因此它会先退出:
logingRTCCharacteristic.setvalue(timestamp)
答案 2 :(得分:1)
您是否可以使用StringBuilder
?如果是这样,您可以执行String reverseText = new StringBuilder(userInput).reverse().toString();
如果没有,为什么不尝试迭代一次数组然后在最后进行比较?保留array
和reverseArray
初始值设定项,但之后执行for或while循环,只需忠实地从userInput
变量复制到两个数组中的正确位置。
然后你可以在最后使用一个比较来决定要打印的内容。
答案 3 :(得分:1)
一些事情。
1
开始的较低索引。userInput.length()-1
开始上层索引,因为这将是您检查的顶部的第一个索引。如果你想要完整的重新设计解决方案,我可以发布它,但你可以从这里自己解决它!
答案 4 :(得分:0)
嗯,问题是每次检查两个字母时都要设置isPalindrome。因此,当最后两个字母checkt相同时,它会说它是一个回文。相反,试试这个:
import java.util.Scanner;
public class Main
{
public static void main (String[] args)
{
boolean isPalindrome = true;
Scanner kb = new Scanner(System.in);
System.out.println("Enter a string:");
String userInput = kb.nextLine();
userInput = userInput.trim().replaceAll(" ", "").toLowerCase();
char[] array = new char[userInput.length()];
char[] reverseArray = new char[userInput.length()];
int i = 0;
int j = userInput.length() - 1;
while(i < j && isPalindrome) {
array[i] = userInput.charAt(i);
reverseArray[j] = userInput.charAt(j);
if (array[i] != reverseArray[j])
isPalindrome = false;
i++;
j--;
}
if(isPalindrome)
System.out.println("It's a palindrome.");
else
System.out.println("Not a palindrome.");
}
}
所以现在isPalindrome布尔值在开头设置为true,当我们找到与此相矛盾的东西时(两个字符不相同),它会将isPalindrome设置为false。
我没有测试过此代码,因此可能会出现其他一些错误。但这是我乍一看的那个。
编辑:我没有从字符串的开头开始。最好使用一段时间而不是一会儿,因为字符串可能是空的。