我的Java回文数判断代码为什么不生效?reverse正常却不返回true
代码问题根因
- 最核心的错误:没有保存输入的原始数值,循环过程中直接修改了入参
number的值,最终对比number == reverse时,number已经被逐次除以10仅剩余最后一位数字,和完整的反转值reverse永远不可能相等,这就是你看到reverse值正确但始终返回false的直接原因。 - 次要问题1:反转计算的逻辑写法不规范,额外加的break属于冗余逻辑,虽然暂时能算出正确的reverse值,但存在边界case错误隐患,比如输入10这类末尾带0的数值时会计算错误。
- 次要问题2:负数处理逻辑错误,负数本身携带负号,本身就不属于回文数,直接将负数转成正数判断不符合回文数的定义规则。
修正后的实现代码
public class NumberPalindrome { public static boolean isPalindrome(int number) { // 负数直接返回false if (number < 0) { return false; } int original = number; int reverse = 0; while (number > 0) { int lastDig = number % 10; // 正确的反转计算顺序:先乘10再加末位 reverse = reverse * 10 + lastDig; number /= 10; } // 用原始值和反转值对比 return original == reverse; } }
内容的提问来源于stack exchange,提问作者Shafa'at Jamil
相关产品推荐
相关产品推荐

