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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:54:50