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

时间:2014-05-06 02:14:13

标签: java sum multidimensional-array

此Matrix类将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
    }
}

4 个答案:

答案 0 :(得分:2)

由于你有一个2D数组,你需要遍历行和列:

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;

或者,使用for-each使这更简单:

int sum = 0;

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

return sum;

答案 1 :(得分:1)

如果您要将其应用于二维数组, 尝试使用具有列计数器和行计数器的普通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循环的1维数组。增强的for循环非常适合打印输出,但不适用于分配/检查值 - 尤其是在多维数组中。

答案 2 :(得分:1)

使用模数和分支是昂贵的,我希望你会发现一个公式要快得多。尝试

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

答案 3 :(得分:0)

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);
    }
}