此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
}
}
答案 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);
}
}