Java数组07——稀疏数组

稀疏数组

 

总结:

记录有效的坐标: 记录原始做表的大小和有效值的个数

                              记录每一个有效值的坐标 ,变成一个新的数组

 

age:
 package array;
 
 public class ArrayDemon09 {
     public static void main(String[] args) {
         //1. 创建一个二维数组 11*11 0:没有棋子 1: 黑棋
         int[][] array1=new int[11][11];
         array1[1][2]=1;
         array1[2][3]=2;
         //输出原始数组
         System.out.println("输出原始数组:");
         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("\n");
        }
         //转化为稀疏数组保存
         //获取有效值的个数
         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. 创建一个稀疏数组
         //                     行数   列数固定为3
         int[][] array2=new int[sum+1][3];
         //首行赋值
         array2[0][0]=11;//行数
         array2[0][1]=11;//列数
         array2[0][2]=sum;//有效值个数
 
         //遍历二维数组,将非0值 存放在稀疏数组中
         int count=0;
         for (int i = 0; i < array1.length; i++) {
             for (int j = 0; j < array1.length; j++) {
                 if(array1[i][j] != 0){
                     count++;
                     //第二行往下的每一排
                     array2[count][0]=i;//横坐标
                     array2[count][1]=j;//纵坐标
                     array2[count][2]=array1[i][j];//赋值
                     /*
                输出稀疏数组:
                          行 列 值
                          11 11 2 11*11 有效个数为2
                          1 2 1
                          2 3 2
                      */
                }
            }
        }
         System.out.println("=========================");
 
         // 输出稀疏数组
         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]]; //还原数组的大小(11*11-----相当于int[11][11])
         //2. 给其中的元素还原它的值
         for (int i = 1; i < array2.length; i++) {//从1开始   头部不用赋值
             array3[array2[i][0]][array2[i][1]]= array2[i][2];
        }
         //打印
         System.out.println("输出还原的数组:");
         for (int i = 0; i < array3.length; i++) {
             for (int j = 0; j < array3.length; j++) {
                 System.out.print(array3[i][j]+"\t");
            }
             System.out.println("\n");
        }
 
    }
 }
 

学习内容源自视频:b站狂神说Java

 

posted @ 2021-07-29 10:25  时间最考验人  阅读(207)  评论(0编辑  收藏  举报