Java while循环回文检测程序变体的运行情况及预期输出问询
分析Java回文检测程序的常见错误变体
首先得说清楚,因为你没贴出具体的变体代码,我就拿日常开发里最容易写错的两种变体来分析,你可以参考着对应自己的情况~
先放一段正常的回文检测代码做对比(保证能正确运行):
public class PalindromeChecker { public static void main(String[] args) { int num = 121; int originalNum = num; int reversedNum = 0; while (num != 0) { int digit = num % 10; reversedNum = reversedNum * 10 + digit; num = num / 10; // 关键步骤:每次循环把num缩小10倍,直到变为0终止循环 } if (originalNum == reversedNum) { System.out.println(originalNum + " is a palindrome."); } else { System.out.println(originalNum + " is not a palindrome."); } } }
这段代码运行后会输出 121 is a palindrome.,逻辑完全正确。
变体1:忘记在循环中更新num的值
这是新手最常犯的错误之一,变体代码如下:
public class PalindromeChecker { public static void main(String[] args) { int num = 121; int originalNum = num; int reversedNum = 0; while (num != 0) { int digit = num % 10; reversedNum = reversedNum * 10 + digit; // 漏掉了 num = num / 10; 这行关键代码! } if (originalNum == reversedNum) { System.out.println(originalNum + " is a palindrome."); } else { System.out.println(originalNum + " is not a palindrome."); } } }
运行情况与预期输出:
- 运行状态:程序会陷入无限循环。因为
num的值始终是初始的121,永远不等于0,while循环的终止条件永远无法满足,程序会一直占用CPU资源持续运行,根本不会进入后续的判断逻辑。 - 输出结果:不会输出任何内容,程序会一直挂着,直到你手动终止它。
变体2:用已被修改的num代替原始数字做判断
另一种常见错误是循环结束后,误拿已经变成0的num和反转数比较,代码如下:
public class PalindromeChecker { public static void main(String[] args) { int num = 121; int reversedNum = 0; while (num != 0) { int digit = num % 10; reversedNum = reversedNum * 10 + digit; num = num / 10; } // 错误:这里用了已经变为0的num,而非保存的原始数字 if (num == reversedNum) { System.out.println(num + " is a palindrome."); } else { System.out.println(num + " is not a palindrome."); } } }
运行情况与预期输出:
- 运行状态:程序能正常走完循环,但判断逻辑完全错误。循环结束后
num的值是0,而reversedNum是正确反转后的121,两者显然不相等。 - 输出结果:会输出
0 is not a palindrome.,这完全不符合我们检测原始数字是否为回文的需求。
如果你有其他具体的变体代码,欢迎贴出来,我再帮你做针对性分析~
内容的提问来源于stack exchange,提问作者Raghav Sharma
相关产品推荐
相关产品推荐

