如何制作回文程序?[复制]

How to make Palindrome Program? [duplicate]

提问人:JAKE 提问时间:10/27/2023 最后编辑:JAKE 更新时间:10/27/2023 访问量:60

问:

我试图反转输入的字符串,并在输入等于其反向时输出“This is a Palindrome.”。

反面部分是正确的,但它一直说它不相等,即使我输入了一个回文编号。我该如何解决这个问题??

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    
    System.out.println("Enter a sequence of numbers: ");
    String sequence = scanner.next();
    
    char[] array = new char[sequence.length()];
    int numberIndex = 0;
            
    String reverse = "";
    
    for (int i = sequence.length() - 1; i >= 0; i--) {
        array[numberIndex] = sequence.charAt(i);
        
        numberIndex++;
    }
    
    for (int i = 0; i < sequence.length(); i++) {
        reverse += array[i];
    }
    
    System.out.println(reverse);
    
    if (sequence == reverse) {
        System.out.println("This number is a palindrome.");
    } else {
        System.out.println("This number is not a palindrome.");
    }
    
}
Java 反向 回文

评论

0赞 K.Nicholas 10/27/2023
修复此问题:.sequence == reverse
0赞 Moob 10/27/2023
比较字符串时使用 .equals()。if(sequence.equals(reverse))
0赞 VGR 10/27/2023
您不需要第二个循环。 就足够了。String reverse = String.valueOf(array);

答:

0赞 Owais Yosuf 10/27/2023 #1

应使用该方法来比较两个字符串的内容。equals

试试这个:

import java.util.Scanner;

public class PalindromeChecker {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("Enter a sequence of numbers: ");
        String sequence = scanner.next();

        char[] array = new char[sequence.length()];
        int numberIndex = 0;

        String reverse = "";

        for (int i = sequence.length() - 1; i >= 0; i--) {
            array[numberIndex] = sequence.charAt(i);
            numberIndex++;
        }

        for (int i = 0; i < sequence.length(); i++) {
            reverse += array[i];
        }

        System.out.println(reverse);

        if (sequence.equals(reverse)) {
            System.out.println("This sequence is a palindrome.");
        } else {
            System.out.println("This sequence is not a palindrome.");
        }
    }
}
0赞 John Doe 10/27/2023 #2

尝试使用 equals 方法进行字符串比较。

取而代之的是这个if (sequence == reverse) {

使用这个if (sequence.equals(reverse)) {

原因是 == 检查引用是否相等,即 “sequence” 和 “reverse”,它们引用字符串并指向 JVM 的堆内存区域中的内存位置,被检查是否为同一引用。 由于“sequence”和“reverse”是堆上不同对象的两个不同变量名称,因此显然它们可以是相同的。

而且你不想检查那个。

相反,您打算做的是,变量名称“sequence”引用的原始字符串在内容上是否与引用“reverse”的反向字符串在内容上是否相等。

这个 equals() 方法检查两个引用的对象是否不为 null,它们属于同一类型并且内容相等。

如果上述参数相同,则等于将返回 true,否则返回 false。

因此,这里应该使用 equals() 方法。