【问题标题】:Even/odd values in an array数组中的偶数/奇数值
【发布时间】:2020-12-21 06:36:27
【问题描述】:

我在使用布尔方法时遇到问题,我想检查数组是偶数、奇数还是两者都不是。我输入了数组大小和数组值,但是“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");
        }
    }

}

【问题讨论】:

  • 如果检查通过,则需要反转布尔检查语句和return false。例如当一个值是奇数时,你应该在 isArrayEven 方法中直接返回 false。

标签: java arrays boolean


【解决方案1】:

你回来得太早了。您需要稍微翻转和修改您的 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

【讨论】:

    【解决方案2】:

    在我看来,您的测试和返回值应该倒置。现在,当您只找到一个偶数时,您将返回“整个数组是偶数”=true。您必须检查所有值,或者当您发现任何不在“is even”函数中的值时返回 false。

    一般来说,我建议最好迭代一次数组并在迭代之前初始化两个布尔值;例如。 "all_are_odd" 和 "all_are_even" 并将它们初始化为 true;

    然后只需迭代整个数组一次,如果遇到不符合 all_are_x 的值,则仅将 all_are_x 设置为 false。

    一旦 all_are_odd / all_are_even 都为假,您可以通过跳出循环进行优化。

    在此迭代之后,您现在可以输出是否全部为偶数、全部为奇数或介于两者之间。

    边缘情况当然是空集。

    【讨论】:

      【解决方案3】:

      你的错误是你在找到偶数或奇数时返回真或假。这意味着假设您有一个整数数组[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;
      }
      

      【讨论】:

        【解决方案4】:

        如果你在数组中找到奇数,你应该发送 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
        }
        

        【讨论】:

          【解决方案5】:

          我有点同意 Richard 的观点,即您需要一些布尔变量,但我会采取不同的方法:

          boolean containsEven = false; boolean containsOdd = false;

          循环遍历数组中的所有元素,一旦找到偶数,就将第一个布尔值更改为真。同样,一旦找到奇数,将第二个布尔值更改为真。如果两个布尔值都为真,您甚至可以考虑提前中断循环,因为通过检查数组的其余部分没有什么可进一步学习的。

          然后,在 if/else 块中使用这些布尔值。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-05-07
            • 1970-01-01
            • 1970-01-01
            • 2016-04-21
            • 2016-04-04
            • 2012-10-10
            相关资源
            最近更新 更多