首页 > 解决方案 > 无法在 Java 中运行 Palindrome 程序

问题描述

这是我查找字符串回文的 Java 代码。即使我输入的 i/p 不是,它也将 o/p 显示为“回文”。任何人都可以请帮忙。

String a = sc.next();
char b[] = a.toCharArray();
char d[] = b;
int size = a.length();
int beg=0,end=size-1;

while(beg<=end)
{
    char temp = b[beg];
    b[beg] = b[end];
    b[end] = temp;
    beg++;
    end--;
}

 if(d.equals(b))
    {
     System.out.print("Palindrome");
    }
else
    System.out.print("Not a Palindrome");

标签: javapalindrome

解决方案


您的实施存在一些问题。首先 -

while(beg<=end)
{
    char temp = b[beg];
    b[beg] = b[end];
    b[end] = temp;
    beg++;
    end--;
}

仔细调试,看看在这个 while 循环结束时,你真的有 d[] 作为 b[] 的反面吗

第二,

 if(d.equals(b))
    {
     System.out.print("Palindrome");
    }

如果两个数组中的所有数组元素都相同,这不是比较的正确方法。如果您研究实现或尝试使用一些示例数组,您将能够自己看到它。

要检查回文,非常简单的方法是使用反转字符串StringBuilder并检查它是否等于原始字符串 -

    Scanner sc = new Scanner(System.in);
    String a = sc.next();
    String aRev = new StringBuilder(a).reverse().toString();


    if (a.equals(aRev)) {
        System.out.print("Palindrome");
    } else {
        System.out.print("Not a Palindrome");
    }

另一种更好的方法是从字符串的开头到中间运行一个循环,并从结尾到中间保持一个索引。然后检查前向索引和后向索引。

    Scanner sc = new Scanner(System.in);
    String a = sc.next();

    boolean palindrome = true;

    for (int i = 0; i < a.length() / 2; i++) {
        if (a.charAt(i) != a.charAt(a.length() - i - 1)) {
            palindrome = false;
            break;
        }
    }

    System.out.println(palindrome ? "Palindrome" : "Not Palindrome");

推荐阅读