## 稀疏数组(棋盘类必备)
package com.joseph.sparseArray;
public class SparseArray {
public static void main(String[] args) {
//创建11*11的棋盘
//0表示棋子。1表示黑子。2表示白子
int chessArr1[][] = new int[11][11] ;
chessArr1[1][2] = 1 ;//第二行第三列是1;
chessArr1[2][3] = 2 ;//第三行第四列是2;
chessArr1[3][4] = 3 ;//第四行第五列是3;
for(int arr[] : chessArr1){
for(int arrKey:arr) {
System.out.print(arrKey + "、");
}
System.out.println();
}
/**
* 将二维数组变为稀疏数组
*/
//获取原二维数组非0值个数
int count = 0 ;
for(int arr[]:chessArr1){
for (int e:arr){
if(e!=0){
count++;
}
}
}
//创建稀疏数组并初始化第一行的值
int sparseArr[][] = new int[count+1][3];
int index = 0 ;
sparseArr[0][0] = chessArr1.length;
sparseArr[0][1] = chessArr1[0].length;
sparseArr[0][2] = count;
//给稀疏数组第二行开始赋值
for(int i = 0 ; i
这里的行数和列数为了更加清晰。我们加1处理。为了直接知道第几行第几列
而真正的行列数是从0开始。
这样就成功地把二维数组转换为稀疏数组。如果要用这个二维数组。再将它继续转化。原理是利用数组中元素代表着行数列数和具体的值。拿出来可以用上。具体代码如下
//稀疏数组转二维数组
//还原二维数组初始化
int row = sparseArr[0][0] ;
int col = sparseArr[0][1] ;
// System.out.println(row + "," + col);
int chessArr2[][] = new int[row][col] ;
//放入非零的值
for(int a = 1 ; a
# 我们发现好像行数列数有点问题。是因为上边的稀疏数组为了直观表明原数组的值的行列数。我们加一处理了。但并不影响我们还原成功。实际上大家应用的时候。不要加一。因为数组下标从0开始。计算机可不需要直观的表现。
## 这样我们就完成了稀疏数组的编程