簡體   English   中英

使用for循環遍歷2D數組

[英]Using a for loop to iterate through a 2D array

我試圖寫一個循環遍歷2D數組並求和每個子數組的循環。

到目前為止,我的代碼如下:

int[][] data = { { 10, 20 }, { 20, 10 }, { 50, 60 }, { 45, 20 }, { 10, 35 }, { 25, 16 } };
int[] sumOfArrays = new int[5];

    for (int[] i : data) {
        int sum = 0;
        for (int x : i) {
            sum =+ x;
        }
        sumOfArrays[i] = sum;
    }

    System.out.println(sumOfArrays);

由於類型不匹配,這是不可能的:(i)int []-int

我該如何解決?

這里有一些問題。 讓我們從最難纏的人開始。

for (int[] i : data) {
    int sum = 0;
    for (int x : i) {
        sum =+ x;
    }
    sumOfArrays[i] = sum;
}

在這些嵌套循環的上下文中, i引用了一個int[]引用,因此您不能使用它來索引任何內容。

通常,在處理foreach循環時, 通常會失去索引到它們的能力 ,因此在嘗試這樣做時應格外小心。

為此,您必須引入一個新變量。 另外,請務必完成任務; 您想要+=而不是=+ ,因為前者只是分配給保證的正值。

int idx = 0;
for (int[] i : data) {
    int sum = 0;
    for (int x : i) {
        sum += x;
    }
    sumOfArrays[idx++] = sum;
}

接下來,您的數組是一個太短的元素-您有六行,但僅為5分配空間。固定該大小,然后上面的代碼即可正常工作。

您正在嘗試將i視為索引,但這是一個值-您當前位於int[]行。

您可以保留一個單獨的index變量,該變量在i for循環的末尾遞增。

int index = 0;
for (int[] i : data) {
    int sum = 0;
    for (int x : i) {
        sum += x;  // +=, not =+
    }
    sumOfArrays[index] = sum;
    index++;
}

另一種選擇是切換到“標准” for循環,因此將index變量定義為for循環的一部分,自己獲取int[]

無論哪種方式,您都需要使用sumOfArrays在代碼末尾打印Arrays.toString的內容

另外, sumOfArrays的長度與data的長度不匹配,因此您將獲得ArrayIndexOutOfBoundsException 嘗試

int[] sumOfArrays = data.length;
    int[][] data = { { 10, 20 }, { 20, 10 }, { 50, 60 }, { 45, 20 }, { 10, 35 }, { 25, 16 } };
    int[] sumOfArrays = new int[data.length];

    for (int i = 0; i < data.length; i++) {
        int sum = 0;
        for (int x : data[i]) {
            sum += x;
        }
        sumOfArrays[i] = sum;
    }

    System.out.println(Arrays.toString(sumOfArrays));

暫無
暫無

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

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