当前位置: 代码迷 >> J2SE >> foreach遍历二维数组出现的有关问题
  详细解决方案

foreach遍历二维数组出现的有关问题

热度:8   发布时间:2016-04-23 20:06:41.0
foreach遍历二维数组出现的问题
为什么用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 中的操作是对迭代变量的操作,所以原来的内容不会变化
一般情况下是不会在 foreach 中修改内容的
------解决思路----------------------
增强for循环一般只用于遍历数组或者集合!不能再增强for循环中修改删除数据!
 //输入数据
    for(int[] i :arry){       
        for(int j :i){           
            j = s.nextInt();
        }
    }    
这样也没有将数据存入数组啊!i[]数组将值赋给j,而你又将从控制台输入的值赋给j,你只是将值赋给 j 覆盖了 j 原来的值,并没有改变数组值啊!所以输出的都是默认值0。
  相关解决方案