java for/foreach循环练习:二维数组跟稀疏数组之间的相互转换

for/foreach循环练习:二维数组跟稀疏数组之间的相互转换

package array;
​
public class ArrayDemo07 {
    public static void main(String[] args) {
        //1.创建一个二维数组
​
        int[][] array1 = new int[11][11];
        array1[1][3] = 1;
        array1[2][4] = 2;
        //输出原始的数组
        System.out.println("输出原始的数组");
        //用foreach输出
//        for (int[] ints : array1) {
//            for (int anInt : ints) {
//                System.out.print(anInt + "\t");
//            }
//            System.out.println();
//        }
​
​
        //用for输出
        for (int i = 0; i < array1.length; i++) {
            for (int j = 0; j < array1.length; j++) {
                System.out.print(array1[i][j] + "\t");
            }
            System.out.println();
        }
        //转换成稀疏数组保存
        //获取有效值的个数
        int sum = 0;
        for (int i = 0; i < array1.length; i++) {
            for (int j = 0; j < array1.length; j++) {
                if (array1[i][j] != 0){
                    sum++;
                }
​
            }
        }
        System.out.println("有效值的个数" + sum);
​
​
        //创建一个稀疏数组的数组
        int[][]  array2 = new int[sum+1][3];
        array2[0][0] = array1.length;
        array2[0][1] = array1.length;
        array2[0][2] = sum;
​
        //遍历二维数组,将非零的值,存放到稀疏数组中
        int count = 0;    //array2[0][0]中的数已经被占了,只要在上面数组中检测到有有效值的数就+1
        for (int i = 0; i < array1.length; i++) {
            for (int j = 0; j < array1[i].length; j++) {
                //如果i!=0,放入刚创建的稀疏数组中
                if (array1[i][j]!=0){
                    count++;    //下面的i;j;array1[i][j];就从array[1][0]开始
                    array2[count][0] = i;
                    array2[count][1] = j;
                    array2[count][2] = array1[i][j];
                }
            }
        }
        //打印稀疏数组
        System.out.println("打印稀疏数组");
        for (int i = 0; i < array2.length; i++) {
            System.out.println(array2[i][0] + "\t" + array2[i][1] + "\t" + array2[i][2] + "\t");
​
        }
        System.out.println("================================");
        //还原成二维数组
        //读取稀疏数组
        int[][] array3 = new int[array2[0][0]][array2[0][1]];   //int[][] array1 = new int[11][11];
​
        //给其中的元素还原它的值
        //i=1 ,i = 0即头部信息不用读11 11 2
        for (int i = 1; i < array2.length; i++) {
            array3[array2[i][0]][array2[i][1]] = array2[i][2];
            //i = 1 array2[1][0]array[1][1]  = [1][3] ==> array3[1][3] = array2[1][2]
            //i = 2 array2[2][0]array[2][1]  = [2][4] ==> array3[2][4] = array2[2][2]
        }
        System.out.println("输出还原的数组");
        /**
         *         //int[][] array1 = new int[11][11];
         *         array1[1][3] = 1;
         *         array1[2][4] = 2;
         */
        //用foreach输出
        for (int[] ints : array3) {
            for (int anInt : ints) {
                System.out.print(anInt + "\t");
            }
            System.out.println();
        }
        }
​
    }
​
​

java for/foreach循环练习:二维数组跟稀疏数组之间的相互转换