簡體   English   中英

計算並返回java中二維數組中所有偶數的總和

[英]calculate and return the sum of all the even numbers in the 2d-array in java

這個 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
    }
}

由於您有一個二維數組,您需要遍歷行和列:

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;

如果您希望將其應用於兩個 d 數組,請嘗試使用具有列計數器和行計數器的普通 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 循環非常適合打印輸出,但不適用於分配/檢查值 - 特別是在多維數組中。

使用模數和分支是昂貴的,我希望你會發現一個公式要快得多。 嘗試

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM