public class SparseArrayTest {
public static void main(String[] args) {
// 创建原的二维数组11*11。
// 0表示没有棋子,1表示黑色棋子,2表示白色棋子。
int[][] chessArr = new int[11][11];
chessArr[1][2] = 1;
chessArr[2][3] = 2;
// 输出原的二维数组。
System.out.println("原的二维数组为:");
for (int[] row : chessArr) {
for (int data : row) {
System.out.print(data + " ");
}
System.out.println();
}
// 将二维数组转成稀疏数组。
// 首先遍历二维数组,得到非0数据的个数。
int sum = 0;
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if (chessArr[i][j] != 0) {
sum++;
}
}
}
// 创建对应的稀疏数组。
int[][] sparseArr = new int[sum + 1][3];
sparseArr[0][0] = 11;
sparseArr[0][1] = 11;
sparseArr[0][2] = sum;
// 遍历二维数组,将非0的值存放到稀疏数组中。
int count = 0; // count用来记录是第几个非0数据
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if (chessArr[i][j] != 0) {
count++;
sparseArr[count][0] = i;
sparseArr[count][1] = j;
sparseArr[count][2] = chessArr[i][j];
}
}
}
// 输出稀疏数组。
System.out.println("得到的稀疏数组是:");
for (int[] row : sparseArr) {
for (int data : row) {
System.out.print(data + " ");
}
System.out.println();
}
// 将稀疏数组恢复成二维数组。
int chessArrNew[][] = new int[sparseArr[0][0]][sparseArr[0][1]];
// 遍历稀疏数组,将非0的值存放到二维数组中。
for (int i = 1; i < sparseArr.length; i++) {
chessArrNew[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
}
// 输出转换后的二维数组。
System.out.println("转换后的二维数组是:");
for (int[] row : chessArrNew) {
for (int data : row) {
System.out.print(data + " ");
}
System.out.println();
}
}
}