学习Demo
稀疏数组
实例:五子棋游戏。数字1表示黑棋,数字2表示白棋,数字0表示空闲点位,棋盘为 11行 * 11列
需求:编写五子棋游戏中,有存盘退出和续上盘的功能。
分析问题:因为该二维数组的很多值是默认值0,因此记录了很多没有意义的数据【有效数据只有黑白棋】
解决:稀疏数组
码上行动
package array; /** * 稀疏数组 * 实例:五子棋游戏。数字1表示黑棋,数字2表示白棋,数字0表示空闲点位,棋盘为 11行 * 11列 * 1. 需求:编写五子棋游戏中,有存盘退出和续上盘的功能。 * 2. 分析问题:因为该二维数组的很多值是默认值0,因此记录了很多没有意义的数据【有效数据只有黑白棋】 * 3. 解决:稀疏数组 */ public class ArrayDemo6 { public static void main(String[] args) { /* 创建一个二维数组 11 * 11(11行乘11列的棋盘) 0:没有棋子 1:黑棋 2:白棋 */ int[][] array1 = new int[11][11]; array1[1][2] = 1; //在第二行第三列落一个黑棋 array1[2][3] = 2; //在第三行第四列落一个白棋 //输出原始数组 System.out.println("-------------- 原始数组如下 ---------------"); //foreach遍历输出原始数组 for (int[] ints : array1) { for (int anInt : ints) { System.out.print(anInt + "\t"); } System.out.println(); //换行 } /* 转换为稀疏数组保存 1. 获取有效值的个数 2. 创建一个稀疏数组 3. 给稀疏数组赋值 4. 输出稀疏数组 */ //计算有效值个数 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) { //不为0则为有效值 sum++; } } } System.out.println("有效值的个数为:" + sum); //2. 创建一个稀疏数组 int[][] array2 = new int[sum + 1][3]; //行:有效值的个数加1 列:固定3列 //3. 给稀疏数组赋值 array2[0][0] = 11; array2[0][1] = 11; array2[0][2] = sum; //遍历二维数组,将非零的值存放在稀疏数组中 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) { //不为0则为有效值 count++; //计数 array2[count][0] = i; //横坐标 array2[count][1] = j; //纵坐标 array2[count][2] = array1[i][j]; //有效值 } } } //4. 输出稀疏数组 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("-------------- 还原数组如下 ---------------"); /* 还原数组 1. 读取稀疏数组 2. 给其中的元素还原它的值 3. 打印 */ //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]; } //3. 打印 for (int[] ints : array1) { for (int anInt : ints) { System.out.print(anInt + "\t"); } System.out.println(); } } }
原文:https://www.cnblogs.com/ming2/p/13696451.html