数组问题:查找偶数位数数字的Java代码输出错误,求排查
问题排查与修复
核心问题分析
你的代码输出错误的根本原因有两个:
- 静态变量未重置:
count和even是静态类变量,处理完第一个数组元素后,count不会自动归零,会累加后续所有数字的位数,导致判断逻辑完全错误。比如处理完前三个3位数后,count已经是9,后续的两位数只会让count继续增加,最终只有第二次循环时count=6满足偶数条件,所以输出1。 - 修改原数组元素:在
while循环中直接修改arr[i]的值,虽然这次没影响结果,但会破坏原数组的数据,属于不良编码习惯。
修复后的代码
public class Nodigeven { static int findnodigeven(int[] arr) { int even = 0; // 将变量移至方法内部,避免静态变量的累加问题 for (int num : arr) { // 增强for循环让代码更简洁 int count = 0; // 每次处理新数字时重置位数计数器 int temp = num; // 用临时变量保存当前数字,不修改原数组 while (temp != 0) { temp = temp / 10; count++; } if (count % 2 == 0) { even++; } } return even; } public static void main(String[] args) { int[] arr = {122, 255, 133, 14, 15, 16}; System.out.println(findnodigeven(arr)); // 正确输出应为3 } }
额外优化思路
如果不想用循环统计位数,还可以通过字符串转换的方式简化代码,可读性更强:
static int findnodigeven(int[] arr) { int even = 0; for (int num : arr) { if (String.valueOf(num).length() % 2 == 0) { even++; } } return even; }
这种方式对于正整数场景完全适用,代码更简洁直观。
内容的提问来源于stack exchange,提问作者Jeevan Jitu
相关产品推荐
相关产品推荐

