稀疏数组 待完善

 

复制代码
复制代码
package array;

import java.util.Arrays;

public class ArrayDemo08 {
    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;
        //输出原始的数组
        //foreach循环:第一个for是打印每个数组(一维数组) 第二个for是打每个数组的元素(二维)
        //第一个for形式:二维数组名称.for回车即可eg.array1.for
        //第二个for形式: 二维数组的名称赋给一个名称.for eg.ints.for
        //可以理解为一维数组控制行数二维数组控制列数
        //和增强for循环的梦幻联动
        System.out.println("输出原始的数组");
        for (int[] ints : array1) {
            for (int anInt : ints) {
                System.out.print(anInt+"\t");//注意是print 不是println
            }
          System.out.println();//空格!!!为了让一个数组在一行和15行配合着用

        }
        System.out.println("====================================================");
        //转换为稀疏数组保存
        //1.获取有效值的个数
        int sum = 0;
        for (int i = 0; i < 11; i++) {
            for (int j = 0; j < 11; j++) {
                if(array1[i][j]!=0){
                    sum++;
                }

            }

        }
        System.out.println("有效值的个数:"+sum);
        //2.创建一个稀疏数组的数组
        /**
         *     行  列  有效值
         *     11  11   2
         *     1   2    1
         *     2   3    2
         */
        int[][] array2 = new int[sum+1][3];
        array2[0][0]=11;
        array2[0][1]=11;
        array2[0][2]=sum;
        //遍历二维数组,将非零的值,存放在稀疏数组中
        int count = 0;//表示稀疏数组的行数 也可以把所有count去掉
        for (int i = 0; i < array1.length; i++) {
            for (int j = 0; j < array1[i].length; j++) {
                if(array1[i][j] !=0){
                    count++;
                    array2[count][0] = i;
                    array2[count][1] = j;
                    array2[count][2] = array1[i][j];
                }

            }

        }
        //3.输出稀疏数组
        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("================================================");
        System.out.println("还原");
        /**
         *
          */
        //还原稀疏数组
        //这个还原和最上边的程序差不多!!!!!!!!
        // 1.读取稀疏数组的值
        int[][] array3 = new int[array2[0][0]][array2[0][1]];
        //2.给其中元素还原值
        for (int i = 1; i < array2.length; i++) {//注意这个是i=1
            array3[array2[i][0]][array2[i][1]] = array2[i][2];

        }
        //3.打印
        System.out.println("输出还原的数组");
        for (int[] ints : array3) {
            for (int anInt : ints) {
                System.out.print(anInt+"\t");//注意是print 不是println
            }
            System.out.println();//空格!!!为了让一个数组在一行和15行配合着用

        }

    }
}
复制代码

 



 

复制代码
posted @   Cloudhahaha  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示