簡體   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