![](/img/trans.png)
[英]Using for-loop, iterate through 2D array in order to pass those values into parameter
[英]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.