Day6-6 稀疏数组

稀疏数组

  • 需求:编写五子棋游戏中,有存盘推出和续上盘的功能

  • 分析:因为该二维数组的很多值都是默认值0,因此记录了很多没有意义的数据

  • 解决:稀疏数组

什么是稀疏数组

  • 当一个数组中大部分元素为0,或者为同一值得数组,可以使用稀疏数组来保存该数组

  • 稀疏数组的处理方式是:

    • 记录数组一共有几行几列,有多少个不同值

    • 把具有不同值的元素和行列记录在一个小规模的数组中,从而缩小程序的规模

 行数[0]列数[1]值[2]
[0] 原数组共多少行 原数组共多少列 原数组共多少值
[1] 原数组第几行 原数组第几列 原数组中的值
[2] 原数组第几行 原数组第几列 原数组中的值
[3] ... ... ...
 
package com.kuang.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;
         //输出原始数组
         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 < 11; i++) {
             for (int j = 0; j < 11; j++) {
                 if (array1[i][j]!=0){
                     sum+=1;
                 }
             }
         }
         System.out.println("有效值的个数为:"+sum);
 ​
         //创建一个稀疏数组的数组
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[i].length; j++) {
                 if (array1[i][j]!=0){
                     count++;
                     array2[count][0]=i;
                     array2[count][1]=j;
                     array2[count][2]=array1[i][j];
                 }
             }
         }
         //输出稀疏数组
         for (int[] ints : array2) {
             for (int anInt : ints) {
                 System.out.print(anInt+"\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++) {
             array3[array2[i][0]][array2[i][1]]=array2[i][2];
         }
         //打印
         for (int[] ints : array3) {
             for (int anInt : ints) {
                 System.out.print(anInt+"\t");
             }
             System.out.println();
         }
     }
 }

 


 
 
posted @ 2022-11-16 16:41  actadams68  阅读(48)  评论(0)    收藏  举报