JAVA学习--java数组--打印稀疏数组和稀疏数组的还原

1.题目描述
在这里插入图片描述
在这里插入图片描述

2.代码实现

打印二维数组

public class test04 {

    public static void main(String args[])
    {
        //1.创建一个二维数组11*11,0代表没有棋子,1代表黑,2代表白棋
        int[][] array1=new int[11][11];
        array1[1][2]=1;
        array1[2][3]=2;
        //输出原始的数组
        System.out.println("输出原始的数组");
        for(int[] ints:array1)
        {
            for(int anint: ints)
            {
                System.out.print(anint+"\t");
            }
            System.out.println();
        }

    }
}

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

如果原始数组懂得0元素太多,则可以压缩原始数组,使他变成稀疏数组。

public class test04 {

    public static void main(String args[])
    {
        //1.创建一个二维数组11*11,0代表没有棋子,1代表黑,2代表白棋
        int[][] array1=new int[11][11];
        array1[1][2]=1;
        array1[2][3]=2;
        //输出原始的数组
//        System.out.println(array1.length);
//        System.out.println(array1[0].length);
        System.out.println("输出原始的数组");
        for(int[] ints:array1)
        {
            for(int anint: ints)
            {
                System.out.print(anint+"\t");
            }
            System.out.println();
        }
        System.out.println("~~~~~~~~~~~~~~~~~~~~~~");
        //转换为稀疏数组保存
        //获取有效值的个数
        int sum=0;
       for(int i=0;i<array1.length;i++) {
           for (int j = 0; j < array1[i].length; j++) {
               if (array1[i][j] != 0) {
                   sum++;
               }
           }
       }
           System.out.println("输出有效值的个数:"+sum);

       //2.创建一个稀疏数组的数组 sum+1代表表头多了一行,3代表列数总共有3列也就是行列值
        int[][] array2=new int[sum+1][3];

        array2[0][0]=11;
        array2[0][1]=11;
        array2[0][2]=sum; //大概意思就是原始数组有11行 11列,有效元素是2个

        //遍历二维数组,把原始数组将非零的值,存放在稀疏数组里面
        int cnt=0;
        for(int i=0;i< array1.length;i++) // 遍历二维数组的行
        {
            for(int j=0;j<array1[i].length;j++)// 遍历当前行的列
            {
               if(array1[i][j]!=0)
               {
                   cnt++;// 记录非零元素的数量
                   //构造一个新数组
                   array2[cnt][0]=i;// 记录 array1[i][j] 所在的行号 i。
                   array2[cnt][1]=j;//记录 array1[i][j] 所在的列号 j。
                   array2[cnt][2]=array1[i][j];//存储非零元素的值。
               }
            }
        }
        //输出稀疏数组
//        System.out.println("稀疏数组");
//        for(int i=0;i< array2.length;i++)
//        {//是打印二维数组 array2 的每一行,但它的结构类似一维数组的打印格式,
//            System.out.println(array2[i][0]+"\t"+array2[i][1]+"\t"+array2[i][2]+"\t");
//        }
        System.out.println("稀疏数组:");
        for (int i = 0; i < array2.length; i++) {
            for (int j = 0; j < array2[i].length; j++) {
                System.out.print(array2[i][j] + "\t");
            }
            System.out.println(); // 换行
        }


    }
}

运行效果如下
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
············································································
**

把稀疏数组还原成原始数组

**

public class test04 {

    public static void main(String args[])
    {
        //1.创建一个二维数组11*11,0代表没有棋子,1代表黑,2代表白棋
        int[][] array1=new int[11][11];
        array1[1][2]=1;
        array1[2][3]=2;
        //输出原始的数组
//        System.out.println(array1.length);
//        System.out.println(array1[0].length);
        System.out.println("输出原始的数组");
        for(int[] ints:array1)
        {
            for(int anint: ints)
            {
                System.out.print(anint+"\t");
            }
            System.out.println();
        }
        System.out.println("~~~~~~~~~~~~~~~~~~~~~~");
        //转换为稀疏数组保存
        //获取有效值的个数
        int sum=0;
       for(int i=0;i<array1.length;i++) {
           for (int j = 0; j < array1[i].length; j++) {
               if (array1[i][j] != 0) {
                   sum++;
               }
           }
       }
           System.out.println("输出有效值的个数:"+sum);

       //2.创建一个稀疏数组的数组 sum+1代表表头多了一行,3代表列数总共有3列也就是行列值
        int[][] array2=new int[sum+1][3];

        array2[0][0]=11;
        array2[0][1]=11;
        array2[0][2]=sum; //大概意思就是原始数组有11行 11列,有效元素是2个

        //遍历二维数组,把原始数组将非零的值,存放在稀疏数组里面
        int cnt=0;
        for(int i=0;i< array1.length;i++) // 遍历二维数组的行
        {
            for(int j=0;j<array1[i].length;j++)// 遍历当前行的列
            {
               if(array1[i][j]!=0)
               {
                   cnt++;// 记录非零元素的数量
                   //构造一个新数组
                   array2[cnt][0]=i;// 记录 array1[i][j] 所在的行号 i。
                   array2[cnt][1]=j;//记录 array1[i][j] 所在的列号 j。
                   array2[cnt][2]=array1[i][j];//存储非零元素的值。
               }
            }
        }
        //输出稀疏数组
//        System.out.println("稀疏数组");
//        for(int i=0;i< array2.length;i++)
//        {//是打印二维数组 array2 的每一行,但它的结构类似一维数组的打印格式,
//            System.out.println(array2[i][0]+"\t"+array2[i][1]+"\t"+array2[i][2]+"\t");
//        }
        System.out.println("稀疏数组:");
        for (int i = 0; i < array2.length; i++) {
            for (int j = 0; j < array2[i].length; j++) {
                System.out.print(array2[i][j] + "\t");
            }
            System.out.println(); // 换行
        }
        System.out.println("~~~~~~~~~~~~~~~~~~~~~~");
        System.out.println("输出还原到的数组:");
        //读取稀疏数组,array2[0][0]=11,array2[0][1]=11
        int[][] array3=new int[array2[0][0]][array2[0][1]];
        //2.给其中的元素还原它的值,从第一行开始
        for(int i=1;i< array2.length;i++)
        {
            //array2中分离的行和列组合一下就是代表有值的元素
            array3[array2[i][0]][array2[i][1]]=array2[i][2];
            //定位有值元素的行和列,再把array2的值附上去。
        }
        //3.打印
        System.out.println("输出还原的数组");
        for(int[] ints:array3)
        {
            for(int anInt:ints)//遍历当前行的列数
            {
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }
        
    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值