1 package www.array; 2 3 public class Demo6_ArrayDouble { 4 public static void main(String[] args) { 5 //1,创建一个二维数组 11*11 0:没有棋子 1:黑棋 2:白棋 6 int[][] array = new int[11][11]; 7 array[1][2] = 1; 8 array[2][3] = 2; 9 //输出原始数组 10 // array.for i.for 11 for (int[] i : array) { 12 for (int j : i) { 13 System.out.print( j + "\t"); 14 } 15 System.out.println(); 16 } 17 18 System.out.println("========================"); 19 //转换为稀疏数组 20 //1, 获取有效值的个数 21 int sum=0; 22 for (int i = 0; i < 11; i++) { 23 for (int j = 0; j < 11; j++) { 24 if (array[i][j] != 0){ 25 sum++; 26 } 27 } 28 } 29 System.out.println("有效值的个数为:"+sum); 30 31 //2, 创建一个稀疏数组,新数组的行为有效值加1,列就为三列(原数组的行+列+值) 32 int[][] array1 = new int[sum+1][3]; 33 34 array1[0][0] = 11; // 原数组有11行 35 array1[0][1] = 11; // 原数组有11列 36 array1[0][2] = sum; // 原数组有两个有效数值 37 38 //遍历二维数组,将有效值存放在稀疏数组中 39 int count=0; 40 for (int i = 0; i < 11; i++) { 41 for (int j = 0; j < 11; j++) { 42 if(array[i][j]!=0){ 43 count++; 44 array1[count][0]=i; 45 array1[count][1]=j; 46 array1[count][2]=array[i][j]; 47 } 48 } 49 } 50 //输出稀疏数组 51 System.out.println("稀疏数组为=============="); 52 for (int i = 0; i < array1.length; i++) { 53 for (int j = 0; j < array1[i].length; j++) { 54 System.out.print(array1[i][j]+"\t"); 55 } 56 System.out.println(); 57 } 58 59 //还原稀疏数组 60 System.out.println("还原稀疏数组为=============="); 61 //读取稀疏数组 62 //稀疏数组第一行的,行和列初始化新的数组 63 int[][] array2 = new int[array1[0][0]][array1[0][1]]; 64 //还原数值值 65 //如果从i=0开始数组就会越界了,因为取出的array1[0][0]=11, 但是11行的数组,下标是从0-10,所以会报数组越界的错误 66 // for (int i = 0; i < array1.length; i++) { 67 for (int i = 1; i < array1.length; i++) { 68 array2[array1[i][0]][array1[i][1]] = array1[i][2]; 69 } 70 //打印还原的数组 71 //array2.for ints.for <快速遍历写法> 72 for (int[] ints : array2) { 73 for (int anInt : ints) { 74 System.out.print(anInt+"\t"); 75 } 76 System.out.println(); 77 } 78 } 79 }