原始的二維數(shù)組打印結果
模擬棋盤(11×11)0表示無子,1表示白子,2表示黑子,使用二維數(shù)組儲存會存在很多的無用數(shù)據(jù)(0)但使用稀疏數(shù)組則可以避免這種情況:
二維數(shù)組轉換的稀疏數(shù)組
- 其中的第 0 行的 [11, 11, 4] 表示為轉換為二維數(shù)組的大小為 11×11 ,4表示二維數(shù)組中有四個非 0 的值有幾個汰现;
- 第 1 行的[1, 2, 1] 最后一個 1 表示二維數(shù)組中的值胶坠,第一個 1 表示換為二維數(shù)組當前值轉是處于第一行君账,2 表示轉換成二維數(shù)組當前值是處于第二列。
- 自第一行以下所有都為儲存的 值和值的位置
代碼實現(xiàn):
1. 創(chuàng)建一個二維數(shù)組并且賦值:
//創(chuàng)建一個原始的二維數(shù)組 11*11
//0:表示沒有棋子沈善,1:表示黑子 2:表示白子
int[][] chessArr = new int[11][11];
chessArr[1][2] = 1;
chessArr[2][3] = 2;
chessArr[3][3] = 1;
chessArr[1][3] = 2;
//輸出原始的二維數(shù)組
System.out.println("原始的二維數(shù)組");
for (int[] row : chessArr) {
for (int data : row) {
System.out.printf("%d\t", data);
}
System.out.println();
}
打印結果為第一張圖
2. 將二維數(shù)組轉換成稀疏數(shù)組:
//將二維數(shù)組 轉 稀疏數(shù)組
//1.遍歷二維數(shù)組得到非0數(shù)據(jù)的個數(shù)
int sum = 0; //記錄非 0 數(shù)據(jù)出現(xiàn)的次數(shù)
for (int[] ints : chessArr) {
for (int j = 0; j < ints .length; j++) {
if (ints[j] != 0) {
sum++;
}
}
}
System.out.println("sum = " + sum);
//2.創(chuàng)建對應的稀疏數(shù)組
int[][] sparseArr = new int[sum + 1][3];
//給稀疏數(shù)組賦值
sparseArr[0][0] = chessArr.length;
sparseArr[0][1] = chessArr.length;
sparseArr[0][2] = sum;
//遍歷二維數(shù)組將非 0 的值存放到 sparseArr 中
int count = 0;
for (int i = 0; i < chessArr.length; i++) {
for (int j = 0; j < chessArr.length; j++) {
if (chessArr[i][j] != 0) {
count++;
sparseArr[count][0] = i;
sparseArr[count][1] = j;
sparseArr[count][2] = chessArr[i][j];
}
}
}
//輸出稀疏數(shù)組
System.out.println();
System.out.println("得到稀疏數(shù)組為~~~");
for (int[] ints : sparseArr) {
System.out.printf("%d\t%d\t%d\t\n", ints[0], ints[1], ints[2]);
}
輸出結果為第二張圖
3. 將稀疏數(shù)組轉換成二維數(shù)組:
//將稀疏數(shù)組恢復成二維數(shù)組:
//先讀取稀疏數(shù)組第一行乡数,根據(jù)第一行數(shù)據(jù),創(chuàng)建二維數(shù)組
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];
}
//恢復后的二維數(shù)組
System.out.println();
System.out.println("恢復后的二維數(shù)組");
for (int[] row : chessArr2) {
for (int data : row) {
System.out.printf("%d\t", data);
}
System.out.println();
}