Java回文检查器仅运行一次且退出功能失效问题求助
问题分析与修复方案
核心问题1:字符串比较逻辑错误
Java里不能用!=判断字符串内容是否相等,!=比较的是对象内存地址而非实际内容,必须用!original.equals("q")来校验退出指令。另外你代码里初始提示是输入"q"退出,但循环内的提示写成了"quit",前后不一致会导致用户混淆,建议统一成同一个退出关键词。
核心问题2:反转字符串变量未重置
oposite在循环外初始化后,每次循环都会在原有内容上追加新的反转字符——比如第一次输入"aba",oposite变成"aba";第二次输入"abc"时,oposite会变成"aba"+"cba"="abacba",自然和新输入的"abc"不相等。因此每次循环开始前必须重置oposite为空字符串。
修复后的完整代码
import java.util.Scanner; public class PalindromeChecker { public static void main(String[] args) { Scanner stdln = new Scanner(System.in); String original; System.out.printf("Please enter something to see if it is a palindrome.%nEnter \"q\" to stop.%n"); original = stdln.nextLine(); while (!original.equals("q")) { String oposite = ""; // 每次循环重新初始化,清除上一次的残留内容 int length = original.length(); for (int i = length - 1; i >= 0; i--) { oposite = oposite + original.charAt(i); } if (original.equals(oposite)) { System.out.println("It is a palindrome."); } else { System.out.println("It is not a palindrome."); } // 统一退出提示,避免用户混淆 System.out.printf("Please enter something to see if it is a palindrome.%nEnter \"q\" to stop.%n"); original = stdln.nextLine(); } stdln.close(); // 关闭Scanner,避免资源泄漏 } }
额外优化建议
- 用
StringBuilder拼接反转字符串比直接用+效率更高,适合处理长文本:StringBuilder opositeBuilder = new StringBuilder(); for (int i = length - 1; i >= 0; i--) { opositeBuilder.append(original.charAt(i)); } String oposite = opositeBuilder.toString(); - 如果需求允许,可以忽略大小写和非字母数字字符(比如"A man, a plan, a canal: Panama"这类带标点的回文),让程序更实用。
内容的提问来源于stack exchange,提问作者jake myers
相关产品推荐
相关产品推荐

