当前位置: 首页 > news >正文

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();
        }
        
    }
}

在这里插入图片描述

相关文章:

  • React基础语法速览
  • 每日一题力扣2960.统计已测试设备c++
  • 从零开始:使用 Cython + JNI 在 Android 上运行 Python 算法
  • C++进阶(一)
  • 智能照明与新能源集成的精细化能效管理实践
  • 蓝桥杯备赛-DFS-有奖问答
  • Android中的setInheritRT
  • JAVA_数据结构_栈和队列
  • 实现分布式锁需要考虑哪些问题?
  • 组播策略路由选择
  • SSH密钥认证 + 文件系统权限控制 + Git仓库配置+封存与解封GIT仓库
  • mac环境下chatwoot客服聊天docker本地部署+对接通义千问Qwen2.5
  • RAG 架构地基工程-Retrieval 模块的系统设计分享
  • 安卓15/aosp15/lineage21使用brunch编译老是报错OOM内存不足
  • 怎样才能把网页数据保存到网络上?
  • 【redis】在 Spring中操作 Redis
  • 设计模式之命令模式:原理、实现与应用
  • u-net系列算法
  • 工作相关记录
  • SpringSecurity——前后端分离登录认证
  • 年轻小将绽放光芒!中国短跑男女接力队直通东京世锦赛
  • 时代中国控股:前4个月销售额18.1亿元,境外债重组协议押后聆讯至5月底
  • 中国词学研究会原会长、华东师大教授马兴荣逝世,享年101岁
  • 图忆|红场阅兵:俄罗斯30年来的卫国战争胜利日阅兵式
  • 习近平同瑞典国王卡尔十六世·古斯塔夫就中瑞建交75周年互致贺电
  • 比特币价格时隔三个月再度站上10万美元