(1)先创建一个二维数组
int[][] chessArr = new int[11][11];
chessArr[6][2] = 1;
chessArr[2][8] = 2;
chessArr[4][5] = 2;
chessArr[3][3] = 1;
chessArr[1][4] = 2;
(2)再将这个二维数组输出
System.out.println("二维数组:");
for (int[] row : chessArr) {
for (int data : row) {
System.out.print(data + "\t");
}
System.out.println();
}
二维数组:
0 0 0 0 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 2 0 0
0 0 0 1 0 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 1 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
(3)遍历求二维数组中非0的个数
int sum = 0;
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if (chessArr[i][j] != 0) {
sum++;
}
}
}
(4)创建对应的稀疏数组并给其赋值
int[][] sparseArr = new int[sum + 1][3];
sparseArr[0][0] = 11;
sparseArr[0][1] = 11;
sparseArr[0][2] = sum;
(5)遍历二维数组,将非0的值存放到sparseArr中,
int num = 0; //num 用于记录是第几个非0数据
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if (chessArr1[i][j] != 0) {
num++;
sparseArr[count][0] = i;
sparseArr[count][1] = j;
sparseArr[count][2] = chessArr[i][j]
}
}
}
(6)输出得到得稀疏数组
System.out.println("得到的稀疏数组为:");
for (int i = 0; i < sparseArr.length; i++) {
System.out.println(sparseArr[i][0] + "\t" + sparseArr[i][1] + "\t" + sparseArr[i][2]);
}
得到的稀疏数组为:
11 11 5 //行 列 个数
1 4 2
2 8 2
3 3 1
4 5 2
6 2 1
(7)将稀疏数组恢复成原始二维数组
int[][] chessArr2 = new int[sparseArr[0][0]] [sparseArr[0][1]];
for (int i = 1; i < sparseArr.length; i++) {
chessArr2[sparseArr[i][0]] [sparseArr[i][1]] = sparseArr[i][2];
}
(8)输出恢复后的二维数组
System.out.println("恢复后的二维数组:");
for (int[] row : chessArr2) {
for (int data : row) {
System.out.print(data + "\t");
}
System.out.println();
}
恢复后的二维数组:
0 0 0 0 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 2 0 0
0 0 0 1 0 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 1 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