仗劍走天涯——『錯誤收錄』
阿新 • • 發佈:2020-12-08
for—each 不能操作元素本身
我的需求
將只包含 1和0 的二維陣列的所有元素反置,即所有1變成0、0變成1。
原始陣列:
我的做法
使用for—each運算元組:
public class test {
public static void main(String[] args) {
int[][] array = {{0,0,1,1},{1,0,1,0},{1,1,0,0}};
// for-each 操作
for(int[] arr : array) {
for(int k : arr) {
k ^= 1;
}
}
}
}
乍一看,沒啥問題。
但是,我們來看看操作後的陣列:
陣列元素完全沒有變化,和原始陣列一模一樣。
查了一下,for—each的底層實現是迭代器,就是在迴圈中拿到的是每一個元素的值(可以理解為拷貝其值),而不是每一個元素本身。
因此,我們並不能使用for—each來對陣列元素本身進行操作,只能使用陣列元素本身。
正確的做法
使用正常的for迴圈,來對陣列元素本身進行操作:
public class test {
public static void main(String[] args) {
int[][] array = {{0,0,1,1},{1,0,1,0},{1,1,0,0}};
// for迴圈操作
for(int i=0; i<array.length; i++) {
for(int j=0; j<array[i].length; j++) {
array[i][j] ^= 1;
}
}
// 遍歷
for(int[] arr : array) {
for(int k : arr) {
System.out.print(k + " ");
}
System.out.println();
}
}
}
執行結果:
結論
for—each的底層實現是迭代器,只適合拿到元素的值,然後進一步操作的情況,它並不能影響元素本身,不適合對元素本身進行操作的情況。
持續跟新中。。。