用java计算并返回2d数组中所有偶数的总和

用java计算并返回2d数组中所有偶数的总和,java,sum,multidimensional-array,Java,Sum,Multidimensional Array,此矩阵类将int[][]作为参数保存在 实例变量 我需要完成sumOfEvenNumbers方法来计算并返回数组中所有偶数的总和 public class Matrix { private int[][] matrix; /** * Gets the sum of all the even numbers in the matrix * @return the sum of all the even numbers */ public in

此矩阵类将
int[][]
作为参数保存在 实例变量

我需要完成
sumOfEvenNumbers
方法来计算并返回数组中所有偶数的总和

public class Matrix
{
    private int[][] matrix;

    /**
     * Gets the sum of all the even numbers in the matrix
     * @return the sum of all the even numbers
     */
    public int sumOfEvenNumbers()
    {
        int sum = 0;
        for (int[] i: array)                          
        if (i%2 == 0){ 
        sum += i;        
        }
        return sum;
         // TODO: Return the sum of all the numbers which are even
    }
}

如果希望将其应用于二维数组, 尝试使用具有列计数器和行计数器的普通for循环,然后将总和相加。 所以基本上是for循环中的for循环。同样地:

for(int col=0; col < matrix.length; col++)
{
  for(int row=0; row < matrix.length; row++)
 {
  //your code to access display[row][col]
 }
}
for(int col=0;col

您当前的代码只支持带有增强for循环的一维数组。增强for循环非常适合打印输出,但不适合分配/检查值-尤其是在多维数组中。

使用模和分支非常昂贵,我希望您会发现一个公式要快得多。试一试

public long sumOfEvenNumbers() {
    long sum =0;
    for (int[] arr: array)
        for(int i : arr)                          
            sum += (~i & 1) * i;        
    return sum;
}
如果您有
(i&1)*i
这将是
0
表示偶数,而
i
表示奇数。这只会增加奇数。对于偶数,我们可以翻转
i
的位,并使用
(~i&1)*i
,奇数为
0
,偶数为
i


~i
翻转
i
的所有位,与
i^-1
-i-1
相同,或者更准确地说是
-i=~i+1
因为您有一个二维数组,所以需要遍历行和列:

int sum = 0;

for (int i=0;i<arr.length;i++)
    for (int j=0;j<arr[i].length;j++)
        if(arr[i][j] % 2 == 0)
            sum += arr[i][j];

return sum;
打包作业;
公共类HW89SumevendexenRow{
公共静态void main(字符串[]args){
int[]a={
{-5,-2,-3,7},
{1,-5,-2,2},
{1,-2,3,-4}
};
整数和=0;

对于(int i=0;我请更清楚地回答您的问题……欢迎来到SO!请发布代码,而不仅仅是理论。很高兴见到新朋友:)您能解释一下什么是
sum+=(~i&1)*我
做了什么?这条曲线在做什么?:)@AnubianNoob添加了一点分解。该死……这比
%
好多少?它当然更难读。
%
是最昂贵的整数运算之一,如果((i&1)==0,你可以使用
减少它
但是分支未命中也相当昂贵。分支未命中的代价大约是整数的4倍
*
Hmm这似乎是不值得的优化之一……可读性在这里似乎更重要。@PeterLawrey什么意思更简单?至少比我写的更简单。使用for each会使它更简单。/**编写一个程序,对偶数索引和偶数行上的所有数字求和并打印出来。例如,在下面的数组中,带括号的数字将求和:0 1 2 3 0(4)(6)(3)(2)1(4)1(2)3 2(1)(2)(6)(9)*/这是上面答案的问题
int sum = 0;

for (int[] innerArr : arr)
    for (int i : innerArr)
        if(i % 2 == 0)
            sum += i;

return sum;
package Homeworks;

public class HW89SumEvenIndexEvenRow {
    public static void main(String[] args) {

        int[][] a = {
                {-5,-2,-3,7},
                {1,-5,-2,2},
                {1,-2,3,-4}
        };
        int sum=0;
        for (int i=0;i<a.length;i+=1){
            for (int j=0;j<a[i].length;j++)
                if(i%2==0 ||j%2==0) {
                    sum=sum+a[i][j];
                }
        }
        System.out.println(sum);
    }
}