簡體   English   中英

數組中的偶數/奇數值

[英]Even/odd values in an array

我在使用 boolean 方法時遇到問題,我想檢查數組是偶數、奇數還是兩者都不是。 我輸入了數組大小和數組值,但是“isArrayEven”方法一直輸出“數組中的所有數字都是偶數”,即使我的數組是 1,2,3 並且 isArrayEven 應該是假的。

import java.util.Scanner;

public class OddOrEven {
    
    public static boolean isArrayEven(int[] arrayValues, int arraySize){

        for(int i = 0; i <= arraySize -1; i++)
        {
            if(arrayValues[i] % 2 == 0)
            {
                return true;
            }
        }
        return false;
    }

    public static boolean isArrayOdd(int[] arrayValues, int arraySize){

        for(int i = 0 ; i < arraySize ; i++)
        {
            if(arrayValues[i] % 2 == 1)
            {
                return true;
            }
        }
        return false;
    }

    public static void main(String[] args) {
        
        Scanner scan = new Scanner(System.in);

        int arraySize = scan.nextInt();             
        int[] arrayValues = new int[arraySize];     

        for(int i = 0; i <= arraySize-1; i++)
        {
            arrayValues[i] = scan.nextInt();
        }
        
        if(isArrayEven(arrayValues,arraySize) == true)
        {
            System.out.println("all numbers in array is even");
        }else if(isArrayOdd(arrayValues,arraySize) == true)
        {
            System.out.println("all numbers in arrat is odd");
        }else if(isArrayEven(arrayValues,arraySize) == false && isArrayOdd(arrayValues,arraySize) == false)
        {
            System.out.println("both have even and odd");
        }
    }

}

你回來得太早了。 您需要稍微翻轉和修改您的 if 語句。 看看這個:

public static boolean isArrayEven(int[] arrayValues, int arraySize){

    for(int i = 0; i <= arraySize -1; i++)
    {
        if(arrayValues[i] % 2 != 0)
        {
            return false;
        }
    }
    return true;
}

public static boolean isArrayOdd(int[] arrayValues, int arraySize){

    for(int i = 0 ; i < arraySize ; i++)
    {
        if(arrayValues[i] % 2 == 0)
        {
            return false;
        }
    }
    return true;
}

這里我稍微修改了 if 語句。

isArrayEven方法中,我在第一次出現奇數時返回false 如果沒有出現odd ,我返回true

isArrayOdd方法中,我在第一次出現偶數時返回false 如果沒有偶數出現,我返回true

在我看來,您的測試和返回值應該倒置。 當您只找到一個偶數時,您現在將返回 "the entire array is even"=true 。 您必須檢查所有值,或者當您發現任何不在“偶數”function 中的值時返回 false。

一般來說,我建議最好迭代一次數組並在迭代之前初始化兩個布爾值; 例如。 “all_are_odd”和“all_are_even”並將它們初始化為 true;

然后只需迭代整個數組一次,並且僅在遇到不滿足 all_are_x 的值時才將 all_are_x 設置為 false。

一旦 all_are_odd / all_are_even 都為假,您可以通過跳出循環來進行優化。

在這次迭代之后,您現在可以 output 是偶數、奇數還是介於兩者之間。

邊緣情況當然是空集。

你的錯誤是只要你找到偶數或奇數,你就會返回 true 或 false。 這意味着假設您有一個 integer 數字[2, 1, 3, 5]的數組。 當您為此數組運行 isEven 方法時,它將返回 true,但數組的第一個、第二個和第三個值是奇數。 你需要做的與你現在正在做的相反。

public boolean isEven(int arr[]){
    for(int i=0; i<arr.length; ++i)
       if(arr[i]%2 !=0) return false;
    return true;
}

如果在數組中找到奇數,則應發送 false,如果數組中的所有元素均為偶數,則返回 true。

public static boolean isArrayEven(int[] arrayValues, int arraySize){
    for(int i = 0; i <= arraySize -1; i++) {
        if(arrayValues[i] % 2 != 0) { // if found an odd number
            return false;
        }
    }
    return true; // if not found any odd number means all number is even
}

我有點同意理查德的觀點,你需要一些 boolean 變量,但我會采取不同的方法:

boolean containsEven = false; boolean containsOdd = false;

循環遍歷數組中的所有元素,找到偶數后立即將第一個 boolean 更改為 true。 同樣,一旦找到奇數,將第二個 boolean 更改為 true。 如果兩個布爾值都為真,您甚至可以考慮提前打破循環,因為從檢查數組的 rest 中沒有什么可以進一步學習的。

然后,在您的 if/else 塊中使用這些布爾值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM