我在java代码中创建了一个非常简单的应用程序,但由于某些原因它不起作用。它是一个回文检查器。
这是代码。
MAIN:
public class main {
public static void main(String[] args) {
Palindroom.palindroomChecker("RACECAR");
}
}
`Palindroom类:
公共课Palindroom {
public static void palindroomChecker(String input) {
String omgekeerd = "";
boolean isPalindroom = false;
int length = input.length();
for(int i = 0; i < length; i++ ) {
String hulp = "" + input.charAt(i);
omgekeerd = omgekeerd + hulp;
}
System.out.println(omgekeerd);
System.out.println(input);
if(omgekeerd.equals(input)){
System.out.println("DIT IS EEN PALINDROOM!");
}
else {
System.out.println("HELAAS, DIT IS GEEN PALINDROOM!");
}
}
}`
由于某种原因,if语句中的检查不会像往常一样。你可以看到我检查了omgekeerd和输入,我还检查了omgekeerd的长度,看是否有明确的空格。
有人可以帮助我吗?
提前致谢
问候Mauro Palsgraaf
答案 0 :(得分:2)
你的逻辑是有缺陷的。您通过以相同的顺序附加输入的每个字符来重构新字符串,然后检查两个字符串是否相等。所以你的方法总是说输入是回文。
您应该通过以相反的顺序附加字符来构造一个新字符串。
或者你可以通过检查第n个字符与长度为1 - n位置的字符相同,对于0和长度/ 2之间的每个n,可以加快速度。
答案 1 :(得分:1)
你实际上并没有反转字符串,看起来像omgekeerd将与输入的顺序相同。
替换为for(int i = length-1; i >= 0; i--) {
答案 2 :(得分:0)
这可以简化很多
boolean isPalindrome = new StringBuilder(input).reverse().equals(input);
答案 3 :(得分:0)
也许这对你有用吗?
String str = "madam i'm adam."; // String to compare
str = str.replaceAll("[//\\s,',,,.]",""); // Remove special characters
int len = str.length();
boolean isSame = false;
for(int i =0; i<len;i++){
if(str.charAt(i) == str.charAt(len-1-i)){
isSame = true;
}
else{
isSame = false;
break;
}
}
if(isSame){
System.out.print("Equal");
}
else{
System.out.print("Not equal");
}
答案 4 :(得分:0)
i=0;
j=str.length()-1; //length of given string
String str; // your input string
while((i<j)||(i!=j)){
if(str.charAt(i)!=str.charAt(j)){
System.out.println("not palindrome");
break;
}
i++;
j--;
}
System.out.print("palindrome");
//this can used for checking without the need of generating and storing a reverse string