package com.array;
public class xiShuarrays {
public static void main(String[] args) {
//创建二维数组
System.out.println("原数组:");
int [][] array1=new int[11][11];
array1[1][3]=1;
array1[2][4]=2;
for (int i = 0; i <array1.length ; i++) {
for (int j = 0; j <array1.length ; j++) {
System.out.print(array1[i][j]+" ");
}
System.out.println();
}
System.out.println("-----------------");
System.out.println("变位稀疏数组:");
//查找原数组中的有效数字个数 目的是确定稀疏数组的行数
int sum=0;
for (int i = 0; i <array1.length ; i++) {
for (int j = 0; j <array1.length ; j++) {
if(array1[i][j]!=0){
sum++;
}
}
}
//创建稀疏数组 因为行数包含从0计数比实际多一个 所以要sum+1
int[][] array2=new int [sum+1][3];
//确定首行 和 第二行
System.out.println("行\t"+"列\t"+"值\t");
array2[0][0]=11;
array2[0][1]=11;
array2[0][2]=sum;
//遍历稀疏数组,将非0的值存放到稀疏数组 进行赋值
int count=0;
for (int i = 0; i < array1.length; i++) {
for (int j = 0; j < array1.length; j++) {
if(array1[i][j]!=0){
count++;
array2[count][0]=i;
array2[count][1]=j;
array2[count][2]=array1[i][j];
}
}
}
//输出稀疏数组
for (int i = 0; i <array2.length ; i++) {
for (int j = 0; j <array2.length ; j++) {
System.out.print(array2[i][j]+"\t");
}
System.out.println();
}
//将稀疏数组还原成原数组
//定义一个数组
int [][] a3=new int[array2[0][0]][array2[0][1]];
//将值还原 因为在稀疏数组中的 行,列 代表的是 有效数字在数组中的行列位置
for (int i = 1; i <array2.length ; i++) {
a3 [array2[i][0]][array2[i][1]]=array2[i][2];
}
//打印
for (int[] ints : a3) {
for (int anInt : ints) {
System.out.print(anInt+"\t");
}
System.out.println();
}
}
}
10-27
1171
04-06
1099
06-21
148
10-13
322