package com.baidu.数组; public class Demo08 { public static void main(String[] args) { int[][] array1 = new int[11][11];//定义一个11行11列且只有两个有效值的数组 array1[1][2] = 1; array1[2][3] = 2; int sum1 = 0;//1.总行数-非机器语言之行数,即不是从零开始计数,而是从1开始;2.等于数组的长度 int sum2 = 0;//1.总列数;2.用包含关系比较好理解长度的概念 int count = 0;//有效值的总个数 sum1 = array1.length;//从这一步开始统计数组的总行数、总列数、有效值的总个数 System.out.println("array1数组:"); for (int i = 0; i < array1.length; i++) { for (int j = 0; j < array1[i].length; j++) { System.out.print(array1[i][j]+"\t");//输出array1这个数组 if(array1[i][j]!=0) { count++; } } System.out.println();//第一轮循环完毕换行 sum2 = array1[i].length;//1.sum2 是数组的总列数刚还是array1[i]的长度;2.只能放这里因为要用到for循环的变量i } System.out.println("\n"+"array1数组的总行数是:"+sum1);//实际是输出数组的总行数 System.out.println("arrray1数组的有效值个数是:"+count);//输出数组有效值(非零值)的总数 System.out.println("array1数组的总列数是:"+sum2);//实际是输出数组的总列数 System.out.println("=============================="+"\n");//分隔符 int[][] array2 = new int[count+1][3];//定义一个稀疏数组 array2[0][0]=sum1;//第0行第0列的值是总行数 array2[0][1]=sum2;//第0行第1列的值是总列数 array2[0][2]=count;//第0行第2列的值是有效值的总个数 int sum3 =0;//稀疏数组的行数 System.out.println("将array1数组简写为稀疏数组arrray2:"); for (int i = 0; i < array1.length; i++)//遍历array1这个数组 { for (int j = 0; j < array1[i].length ; j++) { if(array1[i][j]!=0)//当array1数组的值为有效值时 { sum3++; array2[sum3][0]=i;//将array1行数的值赋值给array2数组的第sum3行第零列 array2[sum3][1]=j;//将array1列数的值赋值给array2数组的第sum3行第1列 array2[sum3][2]=array1[i][j];//将array1的有效值赋值给第sum3行第2列 } } } for (int i = 0; i < array2.length; i++)//遍历array2数组并输出数组 { for (int j = 0; j < array2.length; j++) { System.out.print(array2[i][j]+"\t");// } System.out.println();//第一次循环完毕换行 } System.out.println("==============================="+"\n"); int array3[][] = new int[array2[0][0]][array2[0][1]] ;//还原的数组array3的行、列总数分别是array2第0行第零列和第1列的值 for (int i = 1; i < array2.length; i++)//1.遍历数组array2;2.第0行的数已经取出,如果i从零开始会报错 { for (int j = 0; j < array2[i].length; j++) { array3[array2[i][0]][array2[i][1]] = array2[i][2]; //array3的行数是array2第i行第0列的值 //array3的列数是array2第i行第1列的值 //array3的有效值是array2第i行第2列的值 //如果不明白建议多画几遍稀疏数组的排列图 //稀疏数组总列数是固定的只有3列 //稀疏数组第0行三个数值是固定的 // 第0行第0列代表原始数组的总行数 // 第0行第1列代表原始数组的总列数 // 第0行第2列代表原始数组有效值的个数 } } System.out.println("输出还原的数组array3:"); for (int[] ints : array3) { for (int anInt : ints) { System.out.print(anInt+"\t"); } System.out.println(); } } } //输出的所有结果如下: /* array1数组: 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 array1数组的总行数是:11 arrray1数组的有效值个数是:2 array1数组的总列数是:11 ============================== 将array1数组简写为稀疏数组arrray2: 11 11 2 1 2 1 2 3 2 =============================== 输出还原的数组array3: 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 */
将一个数组转换成稀疏数组并还原-java
最新推荐文章于 2021-12-17 21:34:55 发布