回文是一个你可以向后阅读并拥有的字符串 相同的字符与原始字符串的顺序相同,如:“gig”。
我正在尝试在下面的代码中检查它,但它返回“false”,即使它应该是真的。为什么?
public class Palindrome {
public static boolean PalindromeChecker(String s) {
int sum = 0;
StringBuffer revStr = new StringBuffer(s);
revStr.reverse();
for (int i = 0; i < s.length(); i++)
for (int k = 0; k < revStr.length(); k++)
if (s.charAt(i) == revStr.charAt(k)) {
sum++;
}
if (sum == s.length()) {
return true;
} else {
return false;
}
}
}
}
}
答案 0 :(得分:1)
您需要撰写revStr = revStr.reverse();
。目前您正在放弃reverse
的返回。
然后使用.equals
来比较原始和反向的相等性。
也许更有效的方法是在你正在尝试的.charAt
方法的路线上,但首先要使用更简单的方法。
答案 1 :(得分:0)
这里不需要嵌套循环。通过
for (int i = 0; i < s.length(); i++)
for (int k = 0; k < revStr.length(); k++) ...
您正在将s的第一个字母与revStr中的每个字母进行比较,然后将s的第二个字母与revStr中的每个字母进行比较等。请尝试使用单个循环:
public static boolean PalindromeChecker(String s) {
int sum = 0;
StringBuffer revStr = new StringBuffer(s);
revStr.reverse();
for (int i = 0; i < s.length(); i++)
if (s.charAt(i) == revStr.charAt(k)) {
sum++;
}
if (sum == s.length()) {
return true;
} else {
return false;
}
}
答案 2 :(得分:0)
这是一个使用while循环的简单方法
public static void main(String[] args) {
System.out.println(palindromeChecker("gig"));
System.out.println(palindromeChecker("hello"));
System.out.println(palindromeChecker("racecar"));
System.out.println(palindromeChecker("12345678987654321"));
System.out.println(palindromeChecker("palindromechecker"));
}
public static boolean palindromeChecker(String s) {
int start = 0;
int end = s.length() - 1;
while (start < end) {
if (s.charAt(start) != s.charAt(end)) {
return false;
}
start++;
end--;
}
return true;
}
结果:
true
false
true
true
false