编写五子棋程序中,会有存盘退出和续上盘的功能。
ok,上棋盘
转化为二维数组的模样:
正常使用二维数组进行存取,会有很多重复数据0,数组的大小也就是11 * 11
假如我们用稀疏数组的话,会相应地减少数组大小,当然还是看具体情况。
这里我们用另外一个二维数组演示:
转成稀疏数组
第一行为二维数组的 长 宽 以及 有几个不为默认值的值
后续的为每个棋子的坐标以及值(黑棋或白棋)
最后介绍二维数组转稀疏数组,稀疏数组转二维数组
public static void main(String[] args) {
//创建一个原始二维数组11 * 11
//0: 表示没有棋子, 1: 表示黑子, 2: 表示白子
int chessArray1[][] = new int[11][11];
chessArray1[1][2] = 1;
chessArray1[2][3] = 2;
for (int[] row: chessArray1){
for (int data: row){
System.out.printf("%d\t", data);
}
System.out.println();
}
//二维数组转稀疏数组
int num = 0;
for (int i = 0; i < chessArray1.length; i++){
for (int j = 0; j <chessArray1[0].length; j++){
if (chessArray1[i][j] != 0){
num++;
}
}
}
//创建对应的稀疏数组
int[][] sparseArray = new int[num+1][3];
//给稀疏数组赋值
sparseArray[0][0] = chessArray1.length;
sparseArray[0][1] = chessArray1[0].length;
sparseArray[0][2] = num;
//二维数组非0数据存到稀疏数组中
int sum = 1; //控制行
for (int i = 0; i < chessArray1.length; i++){
for (int j = 0; j <chessArray1[0].length; j++){
if (chessArray1[i][j] != 0){
sparseArray[sum][0] = i;
sparseArray[sum][1] = j;
sparseArray[sum][2] = chessArray1[i][j];
sum++;
}
}
}
//输出稀疏数组
System.out.println("输出稀疏数组");
for (int[] row: sparseArray){
for (int data: row){
System.out.printf("%d\t", data);
}
System.out.println();
}
//恢复成原始的二维数组
int[][] chessArray2 = new int[sparseArray[0][0]][sparseArray[0][1]];
for (int i = 1; i < sparseArray.length; i++){
//列是固定的所以可以直接写
// row的值 col的值 value
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();
}
}
ok!