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

数组问题:查找偶数位数数字的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 02:35:24