思路:
首先查询二维数组chessArr[11][11]中不为0的个数,记为sum。然后新建一个存储稀疏数组
int sparseArr[][] = new[sum+1][3];(列数就是3,这是稀疏数组的形式决定,其第一行是原二维数组的行数、列数、还有不为0的个数,下面的不为0的数所在的行和列以及值(自己可以去查)),然后遍历原二维数组,不为0地方赋给存储稀疏数组sparseArr[][],最后输出。
package com.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;
chessArr1[2][3] = 2;
//输出原始的二维数组
for(int[] row: chessArr1){
for(int data: row){
System.out.printf("%d\t", data);
}
System.out.println();
}
//将二维数组 转稀疏数组的思路
//1 先遍历二维数组 得到非0数据的个数
int sum = 0;
for(int i = 0; i < 11; i++){
for(int j = 0; j < 11; j++){
if(chessArr1[i][j] != 0 ){
sum++;
}
}
}
//System.out.println("sum=" + sum);
int sparseArr[][] = new int[sum + 1][3];
//给稀疏数组赋值
sparseArr[0][0] = 11;
sparseArr[0][1] = 11;
sparseArr[0][2] = sum;
//遍历二维数组,将非0的值赋值sparseArr中
int count = 0;//用于记录第几个非0数据
for(int i = 0; i < 11; i++){
for(int j = 0; j < 11; j++){
if(chessArr1[i][j] != 0 ){
count++;
sparseArr[count][0] = i;
sparseArr[count][1] = j;
sparseArr[count][2] = chessArr1[i][j];
}
}
}
//输出稀疏数组
System.out.println("输出稀疏数组:");
/*for(int i = 0; i < sparseArr.length; i++){
System.out.printf("%d\t%d\t%d\t",sparseArr[i][0],sparseArr[i][1],sparseArr[i][2]);
}*/
for(int i = 0; i < sparseArr.length; i++){
for(int j = 0; j < sparseArr[0].length; j++){
System.out.print(sparseArr[i][j]+" ");
}
System.out.println();
}
}
}