你如何检查一个数组,看它是否有比奇数更多的偶数?

How do you check an array to see if it has more even values than odd?

我正在做一个项目,我需要做的一件事是创建一个方法,它接收一个 int 数组并检查它是否有偶数。该方法需要 boolean 并接受 int[]

我知道我需要使用 for 声明,比如

for (int i = 0; i < hasMoreEvenThanOdd.length; i++)

for (int values : hasMoreEvenThanOdd)

但我对 for 循环会包含这样的内容感到困惑?

if (numerator % denomEven == 0) {
    boolean res = true;
    return res;
} else if (numerator % denomOdd == 0) {
    boolean res = true;
    return res;
} else {
    boolean res = false;
    return res;
}

我不确定最后如何计算数学。

首先如果 对所有偶数求和

第二个如果 总结所有赔率

比较偶数是否大于赔率 Return 是真的

您需要做的是遍历数组中的所有元素,例如使用:

for (int values : hasMoreEvenThanOdd)

for (int i = 0; i < hasMoreEvenThanOdd.length; i++)

然后记录偶数,例如:

if (values % 2 == 0)
   total_even_numbers++; 

循环外:

最后,要获得 odd 个数字的总数,您只需从数组的大小中减去( hasMoreEvenThanOdd.length)您找到的 even 个数字的总数。

最后,只是比较两个值,return相应。

一个例子:

public boolean hasMoreEvenThanOdd(int[] values){
    int even = 0;
    for (int value : values)
        if (value % 2 == 0)
            even++;
    return even > (values.length - even);
}

你应该这样做:

public boolean checkIfHasMoreEvenThanOdds(int[] hasMoreEvenThanOdds) {
    int even = 0;
    int odds = 0;
    for (int i = 0; i < hasMoreEvenThanOdds.length; i++) {
        if (hasMoreEvenThanOdds[i] % 2 == 0) {
            even++;
        } else {
            odds++;
        }
    }
    if (even > odds) {
        return true;
    }
    return false;
}

如果偶数多于赔率,该方法将 return 为真,反之则为假。此代码“解析”数组,并逐个元素检查它是否为奇数,并在变量(奇数或偶数)中递增。到最后,它会检查哪个大于,并以此为基础 return。

正如其他评论中指出的那样,您需要在迭代数组和递增时维护两个变量 nEven(偶数个数)和 nOdd(奇数个数)指定索引处的项目是偶数还是奇数。如果您使用的是 Java 8+,您可以使用流来过滤 odd/even 数字并计算它们:

public static boolean containsMoreEvenThanOdd(int[] array) {
    long nEven = Arrays.stream(array).filter(i -> i % 2 == 0).count();
    long nOdd = Arrays.stream(array).filter(i -> i % 2 != 0).count();

    return nEven > nOdd;
}

我不确定你是不是要计算数组中偶数和奇数的数量。

如果是这样,这可能会对您有所帮助:

for(..........) {
    if (hasMoreEvenThanOdd[i] % 2 == 0) 
    {
        even++; 
    }
    else
    {
        odd++;
    }
}

return even > odd; 

您可以遍历此数组,filter only even numbers, and then check whether their count 超过数组的一半:

public static boolean hasMoreEvenThanOdd(int[] arr) {
    return Arrays.stream(arr).filter(i -> i % 2 == 0).count() > arr.length / 2;
}
// test
public static void main(String[] args) {
    System.out.println(hasMoreEvenThanOdd(new int[]{2, 3, 4, 5, 6, 7})); // false
    System.out.println(hasMoreEvenThanOdd(new int[]{2, 3, 4, 5, 6})); // true
    System.out.println(hasMoreEvenThanOdd(new int[]{2, 3, 4, 5})); // false
    System.out.println(hasMoreEvenThanOdd(new int[]{2, 3, 4})); // true
    System.out.println(hasMoreEvenThanOdd(new int[]{2, 3})); // false
}

将偶数和奇数分成两组 Collectors.partitioningBy

public boolean checkIfHasMoreEvenThanOdds(int[] evenAndOdds) {
  Map<Boolean, List<Integer>> map = IntStream.of( evenAndOdds )
      .boxed().collect( partitioningBy( n -> (n & 1) == 0 ) );
  return(map.get( true ).size() > map.get( false ).size());
}