回文程序编写问题:输入回文却判定不相等如何修复?
问题修复:回文字符串判定失败
我尝试反转输入的字符串,当输入和反转内容相等时输出“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
相关产品推荐
相关产品推荐

