1. 二维数组与稀疏数组的相互转换。
public class sparseArray {
public static void main(String[] args) {
//1.创建一个原始的11*11的二维数组
//用 0:表示没有,1:表示黑子,2:表示白子
int chessArray1[][] = new int[11][11];
chessArray1[1][2] = 1;
chessArray1[2][3] = 2;
//输出原始的二维数组
// ###for循环增强###
System.out.println("原始的二维数组为:");
for (int[] row : chessArray1) {
for (int data : row) {
System.out.printf("%d\t", data); //###格式化输出
}
System.out.println();
}
// for(int i=0;i<chessArray1.length;i++) {
// for (int j = 0; j < 11; j++) {
// System.out.printf("%d\t", chessArray1[i][j]);
// }
// System.out.println();
// }
// ##### 将二维数组转换为稀疏数组#####
//1.遍历二维数据,得到非0数据的个数
int sum = 0;
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if (chessArray1[i][j] != 0) {
sum++;
}
}
}
System.out.println("数组中共有" + sum + "个值");
//2.创建对应的稀疏数组
int sparseArray[][] = new int[sum + 1][3];
//给稀疏数组赋值
sparseArray[0][0] = 11;
sparseArray[0][1] = 11;
sparseArray[0][2] = sum;
//遍历二维数组,将非零数据存放到稀疏数组中
int index = 0; //伪造索引
for (int m = 0; m < 11; m++) {
for (int n = 0; n < 11; n++) {
if (chessArray1[m][n] != 0) {
index++;
sparseArray[index][0] = m;
sparseArray[index][1] = n;
sparseArray[index][2] = chessArray1[m][n];
}
}
}
//3.输出稀疏数组
System.out.println("得到的稀疏数组为:");
for (int k = 0; k < sparseArray.length; k++) {
System.out.printf("%d\t%d\t%d\t", sparseArray[k][0], sparseArray[k][1], sparseArray[k][2]);
System.out.println();
}
//#####将稀疏矩阵恢复为普通数组#####
//1.先读取稀疏数组的第一行,根据第一行数据,创建原始的二维数组
int chessArray2[][]=new int[sparseArray[0][0]][sparseArray[0][1]];
//2.读取稀疏数组的后几行(从第二行开始),并赋值给原始的二维数组即可
for (int i = 1; i < sparseArray.length; i++) {
chessArray2[sparseArray[i][0]][sparseArray[i][1]]= sparseArray[i][2];
}
System.out.println("恢复后的二维数组为:");
for (int[] row : chessArray2){
for (int data : row){
System.out.printf("%d\t",data);
}
System.out.println();
}
}
}