package array; public class 稀疏数组7 { public static void main(String[] args) { //1、定义二维数组的棋盘11行11列,0是空棋,1白棋,2黑棋 int[][] array = new int[11][11]; //棋盘放入黑白各一个棋子 array[1][2] = 1; array[2][3] = 2; //遍历棋盘,打印棋盘 System.out.println("打印棋盘: "); for (int[] ints : array) { for (int anInt : ints) { System.out.print(anInt+"\t"); } System.out.println(); } System.out.println("-----------------------------------------"); //2、计算棋盘上不为零的棋子 int sum=0; for (int[] ints : array) { for (int anInt : ints) { if (anInt != 0){ sum++; } } } System.out.println("有效的棋子个数为: "+sum); System.out.println("-----------------------------------------"); //3、打印稀疏数组 /*例如 11 11 2 1 2 1 2 3 2 */ int count=0; int[][] array2 = new int[sum+1][3]; array2[0][0] = 11; array2[0][1] = 11; array2[0][2] = sum; //遍历array数组的值,存到array2内 for (int i = 0; i < array.length; i++) { for (int j = 0; j < array[i].length; j++) { if (array[i][j] != 0){ count++; array2[count][0] = i; array2[count][1] = j; array2[count][2] = array[i][j]; } } } //遍历取出array的值 System.out.println("打印稀疏数组:"); for (int[] ints : array2) { for (int anInt : ints) { System.out.print(anInt+"\t"); } System.out.println(); } System.out.println("-----------------------------------------"); //4、根据array2的的表头11和11取得行和列数 int[][] array3 = new int[array2[0][0]][array2[0][1]]; //读取array2的稀疏数组,还原棋盘,因为稀疏数组的第一行是表示11行11列,有两个有效的数字,所以i=1,不取第0行 for (int i = 1; i < array2.length; i++) { //读取array2的第二行的第一列和第二列横竖坐标,等于第三列的值 array3[array2[i][0]][array2[i][1]] = array2[i][2]; } //因array已经取得行和列和有效数字,因为遍历array3打印还原棋盘和棋子位置 System.out.println("根据array2稀疏数组,还原棋盘和棋子: "); for (int[] ints : array3) { for (int anInt : ints) { System.out.print(anInt+"\t"); //print没有循环完第一行,不换行 } System.out.println(); //因为第一行循环完毕换行打印 } } }
结果:
C:\Users\Administrator\.jdks\openjdk-14.0.2\bin\java.exe "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2020.1\lib\idea_rt.jar=7942:C:\Program Files\JetBrains\IntelliJ IDEA 2020.1\bin" -Dfile.encoding=UTF-8 -classpath C:\Users\Administrator\IdeaProjects\javaSe\out\production\基础语法 array.稀疏数组7 打印棋盘: 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ----------------------------------------- 有效的棋子个数为: 2 ----------------------------------------- 打印稀疏数组: 11 11 2 1 2 1 2 3 2 ----------------------------------------- 根据array2稀疏数组,还原棋盘和棋子: 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 进程已结束,退出代码 0
原文:https://www.cnblogs.com/corn501/p/13538791.html