如何编写泛型方法统计数组中的回文数?代码无输出问题排查
问题分析与修复方案
代码存在的核心问题
- 死循环导致程序无响应:
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; } }
关键修改说明
- 修复死循环:将循环操作对象改为临时变量
temp,每次循环执行temp = temp / 10,让循环能正常终止。 - 变量重置优化:将
reversed、remainder声明在循环内部,每次遍历元素时重新初始化,避免历史值干扰。 - 类型安全优化:泛型改为
<T extends Number>,限制仅能传入数值类型数组,同时用num.intValue()替代强制转换,更规范安全。 - 可读性提升:将变量名改为语义化名称(如
count、original、reversed),代码逻辑更清晰。
内容的提问来源于stack exchange,提问作者Minhaj Shafin
相关产品推荐
相关产品推荐

