public class AparseArr {
public static void main(String[] args) {
//创建一个二位数组
int charArr[][] = new int[11][11];
charArr[1][2] = 1;
charArr[2][3] = 2;
System.out.println("原始的二维数组");
for (int[] row : charArr) {
for (int data : row) {
System.out.printf("%d\t", data);
}
System.out.println();
}
//稀疏数组
//现将二维数组遍历
int count = 0;
for (int[] row : charArr) {
for (int i = 0; i < row.length; i++) {
if (row[i] != 0) {
count++;
}
}
}
System.out.println("有多少个有效数字" + count);
//创建稀疏数字
int sparseArr[][] = new int[count + 1][3];
//给稀疏数组赋值
sparseArr[0][0] = 11;
sparseArr[0][1] = 11;
sparseArr[0][2] = 2;
int sum = 0;
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if (charArr[i][j] != 0) {
sum++;
//要从第一行进行开始啊
sparseArr[sum][0] = i;
sparseArr[sum][1] = j;
sparseArr[sum][2] = charArr[i][j];
}
}
}
System.out.println();
//稀疏数组的输出
for (int[] row : sparseArr) {
for (int data : row) {
System.out.printf("%d\t", data);
}
System.out.println();
}
//恢复二维数组
//
int two[][] = new int[sparseArr[0][0]][sparseArr[0][1]];
//下面开始遍历稀疏数组,往新的数组里面进行插值
int times = 0;
for (int i = 1; i <= count; i++) {
times++;
two[sparseArr[times][0]][sparseArr[times][1]] =sparseArr[i][2];
}
System.out.println("恢复的二维数组");
for (int[] row : two) {
for (int data : row) {
System.out.printf("%d\t", data);
}
System.out.println();
}
}
}