你如何检查一个数组,看它是否有比奇数更多的偶数?
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());
}
我正在做一个项目,我需要做的一件事是创建一个方法,它接收一个 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());
}