数组:Demo6_ArrayDouble

 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 }

 

上一篇:策略模式-鸭子应用:Head first


下一篇:C#之DateTime日期格式解析