Java 回文卡

Java 回文卡,java,Java,回文是一个字符串,您可以向后阅读并使用它 与原始字符串顺序相同的字符,如:“gig” 我试图在下面的代码中检查它,但它返回“false”,即使它应该是true。为什么? 公共类回文{ 公共静态布尔回文检查器(字符串s){ 整数和=0; StringBuffer revStr=新的StringBuffer; revStr.reverse(); 对于(int i=0;i

回文是一个字符串,您可以向后阅读并使用它 与原始字符串顺序相同的字符,如:“gig”

我试图在下面的代码中检查它,但它返回“false”,即使它应该是true。为什么?

公共类回文{
公共静态布尔回文检查器(字符串s){
整数和=0;
StringBuffer revStr=新的StringBuffer;
revStr.reverse();
对于(int i=0;i
您需要编写
revStr=revStr.reverse()。此时,您将放弃返回的
reverse

然后使用
.equals
比较原始和反向上的相等


也许更有效的方法是使用您正在尝试的
.charAt
方法,但首先要使用更简单的案例。

这里不需要嵌套循环。拥有

for (int i = 0; i < s.length(); i++)
        for (int k = 0; k < revStr.length(); k++) ...
for(int i=0;i
您正在将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;
     }
 }
公共静态布尔回文检查器(字符串s){
整数和=0;
StringBuffer revStr=新的StringBuffer;
revStr.reverse();
对于(int i=0;i
这里有一个简单的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;
}

这种逻辑非常奇怪。为什么要使用嵌套for循环?对于字符串
s1
返回s1.equals(newstringbuffer(s1.reverse().toString())
您只能检查前半部分(如果是奇数,则半部分+1),无需转到单词的末尾
revStr=revStr.reverse()
仍然是一个缓冲区对象,如果与String进行比较,它将始终返回FALSE
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