1. 实际需求:
编写五子棋程序时,存在存盘退出以及续上盘的功能
在该场景下,棋盘可以认为是一个二维数组,并且存在很多0,因此需要使用稀疏数组。
2. 稀疏数组处理方法:
1. 稀疏数组为一个三维的数组sparseArray[row][column][value]
2. 下标为零位置,存储原始二维数组的信息,例如几行几列以及不同值数(与原始数字0不同即为不同数值)
3. 记录不同元素的行、列以及值
代码如下:
public class SparseArray {
public static void main(String[] args) {
//创建原始棋盘
int[][] start = new int[10][10];
//摆放棋子
start[0][2] = 1;
start[1][3] = 2;
start[6][6] = 7;
//打印棋盘
System.out.println("打印棋盘详情");
for (int[] row : start) {
for (int data : row) {
System.out.print(data);
}
System.out.println();
}
//获取数组的row、column以及不同值
int row_number = 10;
int column_number = 10;
int diff_nmber = 0;
for (int[] row : start) {
for (int data : row) {
if (data != 0) {
diff_nmber++;
}
}
}
System.out.println();
System.out.println(row_number + " " + column_number + " " + diff_nmber);
System.out.println();
//创建稀疏数组
int[][] sparseArray = new int[diff_nmber + 1][3];
sparseArray[0][0] = row_number;
sparseArray[0][1] = column_number;
sparseArray[0][2] = diff_nmber;
int count = 0;
//存储原始二维数组信息
for (int i = 0; i < sparseArray[0][0]; i++) {
for (int j = 0; j < sparseArray[0][1]; j++) {
if(start[i][j]!=0){
count++;
sparseArray[count][0] = i;
sparseArray[count][1] = j;
sparseArray[count][2] = start[i][j];}
}
}
System.out.println("打印稀疏数组详情");
for (int[] row : sparseArray) {
for (int data : row) {
System.out.print(data);
}
System.out.println();
}
System.out.println();
//将稀疏数组还原成棋盘
//创建棋盘start2
int start2[][]=new int[sparseArray[0][0]][sparseArray[0][1]];
for(int i=1;i<=sparseArray[0][2];i++){
start2[sparseArray[i][0]][sparseArray[i][1]]=sparseArray[i][2];
}
//打印棋盘信息
System.out.println("打印恢复的棋盘信息");
for (int[] row : start2) {
for (int data : row) {
System.out.print(data);
}
System.out.println();
}
}
}