繁体   English   中英

Arrays:查找偶数位数的数字

[英]Arrays: Find Numbers with Even Number of Digits

public class Nodigeven {
    static int even=0;
    static int count=0;
    static int findnodigeven(int[] arr) {
        for(int i=0;i<arr.length;i++) {
            while(arr[i]!=0) {
                arr[i]= arr[i]/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));
    }   
}

我出错了 output 即:1 ..你能告诉我我在代码中哪里出错了吗

据我所知,您有两个错误。 首先是您没有为循环的每次迭代将count to 0 第二个是你没有检查数组中0的特殊情况。 0是单个数字,因此是奇数。 但是由于您从未进入 while 循环,因此 count 将保持0甚至会递增。

public class Nodigeven {
    
    
    static int findnodigeven(int[] arr) {
        
        for (int i = 0; i < arr.length; i++) {
            int count = 0;

            // check for 0 value and skip.
            if (arr[i] == 0) {
                continue;
            }
            while (arr[i] != 0) {
                arr[i] = arr[i] / 10;
                count++;
            }
            if (count % 2 == 0) {
                even++;
            }
        }
        return even;
    }
    
    public static void main(String[] args) {
        int[] arr = { 122, 255,0, 133, 14, 15, 16 };
        System.out.println(findnodigeven(arr));
    }
}

如果您对您感兴趣并且在不明确计算数字的情况下执行此操作。 使用Math.log10()获取计数,再次跳过0 ,因为 0 的对log of 0未定义。 十进制数 N 的位数是Math.log10(N)+1 您可以使用conditional operator根据需要向奇偶校验计数添加10

public class Nodigeven {
    static int even = 0;
    
    static int findnodigeven(int[] arr) {
        int even = 0;
        for (int i = 0; i < arr.length; i++) {
            even += arr[i] != 0 &&
                (int) (Math.log10(arr[i])+1) % 2 == 0 
                          ? 1 : 0;
        }
        return even;
    }
    
    public static void main(String[] args) {
        int[] arr = { 122, 255,0, 133, 14, 15, 16 };
        System.out.println(findnodigeven(arr));
    }
}



您需要更改代码中初始化count的位置 - 它永远不会重置为 0,因此检测数字是否具有偶数位数的逻辑不正确。

public class Nodigeven {
    static int even = 0;
    static int findnodigeven(int[] arr) {
        for(int i = 0; i < arr.length; i++) {
            int count = 0; // This variable was in the wrong spot!
            while(arr[i] != 0) {
                arr[i] = arr[i] / 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));
    }   
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM