二维数组与稀疏数组

二维数组

    /*
      二维数组
      数组中的每一个元素又是一个数组
      声明
         int[][] a;
     */
    public static void main(String[] args) {
          /*
           new int[3][3]
            创建一个二维数组,二维数组的长度为3,二维数组中的一维数组长度也是3

             {{0,0,0},{0,0,0},{0,0,0}}
               0 1 2   0 1 2   0 1 2
                0        1        2
           */
        
         new int[3][] //创建一个长度为3的二维数组,其中每一个一维数组的值为空(null)
   
           /*
             二维数组遍历
             循环每次取出二维数组中的第i个

            */
        int[][]b=new int[][]{{1,2,3},{1,2,3},{1,2,3}};
         
         for (int i = 0; i < b.length; i++) {
            //遍历每次取出的一维数组
            for (int j = 0; j <b[i].length; j++) {
                System.out.print(b[i][j]+"\t");
            }
            System.out.println();//换行
        }

    }

稀疏数组

/*稀疏数组
   * 含义:稀疏数组一般是将一个数组中有意义的值的信息存放在另一个数组中。
    结构:  列数一般为3,分别表示横向下标,纵向下标,值.(第二行开始)
          第一行一般存原始数组的行数,原始数组的列数,以及有意义的值的个数。根据情况可以调整
    优点:可以对数据进行压缩。*/
    public static void main(String[] args) {
        //定义一个二维数组
        System.out.println("原数组:");
        int[][]a=new int[9][9];
        a[1][2]=1;
        a[2][1]=2;
        a[3][3]=3;
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                System.out.print(a[i][j]+"\t");
            }
            System.out.println();
        }
        
        //稀疏数组
        int t=0;//定义一个值判断有用的个数
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                if (a[i][j]!=0){
                    t++;
                }
            }
        }
        
        //创建一个稀疏数组
        int[][]x=new int[t+1][3];
        x[0][0]=a.length;
        x[0][1]=a[0].length;
        x[0][2]=t;
        
        //将有用的数存放到稀疏数组中
        int c=1;//用来记录稀疏数组中每行的数据
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                if (a[i][j]!=0){
                   x[c][0]=i;
                   x[c][1]=j;
                   x[c][2]=a[i][j];
                   c++;
                }
            }
        }
        
        //打印稀疏数组
        System.out.println("稀疏数组:");
        for (int i = 0; i < x.length; i++) {
            for (int j = 0; j < x[i].length; j++) {
                System.out.print(x[i][j]+"\t");
            }
            System.out.println();
        }
        
        //将稀疏数组转化为所对应的数组
          //创建新数组
        int[][]a2=new int[x[0][0]][x[0][1]];
          //将有用的数传入数组
        int c1=1;
        for (int i = 0; i < a2.length; i++) {
            for (int j = 0; j <a2[i].length ; j++) {
                if (i==x[c1][0]&&j==x[c1][1]){
                    a2[i][j]=x[c1][2];
                    if (c1==t)break;//防止超出稀疏数组
                    c1++;
                }
            }
        }
        
        //打印新数组
        System.out.println("新数组为:");
        for (int i = 0; i < a2.length; i++) {
            for (int j = 0; j < a2[i].length; j++) {
                System.out.print(a2[i][j]+"\t");
            }
            System.out.println();
        }

    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值