为什么用foreach对二维数组输入后,再用它就不能正确的显示呢、显示结果都为0.。
import java.util.*;
public class Test{
public static void main(String[] args){
Scanner s = new Scanner(System.in);
int[][] arry = new int[2][3];
/* 一维数组遍历的第一种方式
//输入数据
for(int i =0;i < arry.length;i++){
for(int j = 0;j <arry[i].length;j++ ){
arry[i][j] = s.nextInt();
}
}
//输出数据
for(int i = 0;i<arry.length;i++){
for(int j = 0;j<arry[i].length;j++)
System.out.printf("%5d",arry[i][j]);
}
*/
// 二维数组遍历的第二种方式
//这就是把二维数组降维使用,将二维数组看做一个一维数组。然后每个元素都是一个一维数组
//输入数据
for(int[] i :arry){
for(int j :i){
j = s.nextInt();
}
}
//输出数据
for(int[] i :arry){
for(int j :i){
System.out.println(j);
}
}
}
}
------解决思路----------------------
for(int[] i :arry){
for(int j :i){
j = s.nextInt();
}
}
这样肯定不行了,内循环改为
for(int j=0;j<i.length;j++){
i[j] = s.nextInt();
}
------解决思路----------------------
使用foreach循环迭代时:
对于基本类型变量,相当于复制了一份值给迭代变量,迭代变量和元素是独立的,所以不能改变元素的值
------解决思路----------------------
输入的时候只用foreach是不行的,理由楼上有解释。输出完全可以用foreach
------解决思路----------------------
我的理解是虽然数组类型是引用类型,但是里面的每个元素都是基本数据类型,对于基本数据类型,foreach 复制了一份值给迭代变量,在 foreach 中的操作是对迭代变量的操作,所以原来的内容不会变化
一般情况下是不会在 foreach 中修改内容的
------解决思路----------------------
增强for循环一般只用于遍历数组或者集合!不能再增强for循环中修改删除数据!
//输入数据
for(int[] i :arry){
for(int j :i){
j = s.nextInt();
}
}
这样也没有将数据存入数组啊!i[]数组将值赋给j,而你又将从控制台输入的值赋给j,你只是将值赋给 j 覆盖了 j 原来的值,并没有改变数组值啊!所以输出的都是默认值0。