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

如何编写泛型方法统计数组中的回文数?代码无输出问题排查

问题分析与修复方案

代码存在的核心问题

  • 死循环导致程序无响应:while((int)a>0)循环中未修改a的值,循环条件永远成立,程序卡死在循环内,无法输出结果。
  • 变量未重置导致判断错误:sum、r在遍历数组元素时未重置为0,第一次计算后的值会干扰后续元素的回文判断。
  • 泛型无类型约束:当前泛型<T>无限制,传入非数值类型数组会触发类型转换异常,存在安全隐患。

修正后的代码

public class PalindromeCounter {
    public static void main(String[] args) {
        Integer[] a = {12131, 121, 324, 123, 33, 43, 5654};
        System.out.println("Total palindromes : " + checkPalindrome(a));
    }

    // 限制泛型为Number子类,确保仅能传入数值类型数组
    public static <T extends Number> int checkPalindrome(T[] b) {
        int count = 0;
        for (T num : b) {
            int original = num.intValue();
            int reversed = 0;
            int temp = original;
            
            // 反转数字,每次将temp除以10,直到temp为0
            while (temp > 0) {
                int remainder = temp % 10;
                reversed = reversed * 10 + remainder;
                temp = temp / 10;
            }
            
            // 比较原数与反转后的数,判断是否为回文
            if (original == reversed) {
                count++;
            }
        }
        return count;
    }
}

关键修改说明

  1. 修复死循环:将循环操作对象改为临时变量temp,每次循环执行temp = temp / 10,让循环能正常终止。
  2. 变量重置优化:将reversed、remainder声明在循环内部,每次遍历元素时重新初始化,避免历史值干扰。
  3. 类型安全优化:泛型改为<T extends Number>,限制仅能传入数值类型数组,同时用num.intValue()替代强制转换,更规范安全。
  4. 可读性提升:将变量名改为语义化名称(如count、original、reversed),代码逻辑更清晰。

内容的提问来源于stack exchange,提问作者Minhaj Shafin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 17:08:16