You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

回文程序编写问题:输入回文却判定不相等如何修复?

问题修复:回文字符串判定失败

我尝试反转输入的字符串,当输入和反转内容相等时输出“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里用==比较字符串时,对比的是两个字符串对象的内存引用地址,而不是字符串的实际内容。你输入的sequence是一个独立的字符串对象,拼接出来的reverse是另一个新对象,哪怕内容完全一样,它们的引用地址也不同,所以sequence == reverse永远会返回false。

修复方法

把判断条件换成String.equals()方法,这个方法的作用就是对比字符串的实际内容:

修改后的核心判断代码:

if (sequence.equals(reverse)) {
    System.out.println("This number is a palindrome.");
} else {
    System.out.println("This number is not 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);
    
    // 改用equals方法对比字符串内容
    if (sequence.equals(reverse)) {
        System.out.println("This number is a palindrome.");
    } else {
        System.out.println("This number is not a palindrome.");
    }
    
}

额外优化建议:你反转字符串的写法可以简化,直接用new StringBuilder(sequence).reverse().toString()就能得到反转后的字符串,不用手动循环拼接,代码会更简洁。

内容的提问来源于stack exchange,提问作者JAKE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 11:25:23