4)代码实现
package com.chb.xishu;
public class xishuArray {
public static void main(String[] args) {
//创建一个原始数组11*11
//0:表示没有棋子,1表示黑子,2表示白子
int arr[][]=new int[11][11];
arr[1][2]=1;
arr[2][3]=2;
//输出原始的二维数组
System.out.println("原始的二维数组");
for (int[] is : arr) {
for (int a : is) {
System.out.print(a+" ");
}
System.out.println();
}
//将二维数组转成稀疏数组
//1.先遍历原二维数组,得到非零元素的个数
int sum=0;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length; j++) {
if(arr[i][j]!=0) {
sum++;
}
}
}
//创建对应的稀疏数组
int arr1[][]=new int[sum+1][3];
//给稀疏数组第一行赋值
arr1[0][0]=11;
arr1[0][1]=11;
arr1[0][2]=sum;
//遍历二维数组,将非零的值放到稀疏数组
int count=0;//用于记录是第几个非零元素
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length; j++) {
if(arr[i][j]!=0) {
count++;
arr1[count][0]=i;
arr1[count][1]=j;
arr1[count][2]=arr[i][j];
}
}
}
//输出稀疏数组
System.out.println("稀疏数组");
for (int[] is : arr1) {
for (int b : is) {
System.out.print(b+" ");
}
System.out.println();
}
//将稀疏数组转换成原数组
//1.先读取稀疏数组的第一行,根据第一行,创建恢复的二维数组
int arr2[][]=new int[arr1[0][0]][arr1[0][1]];
//2.遍历稀疏数组,从第二行开始
for (int i = 1; i < arr1.length; i++) {
arr2[arr1[i][0]][arr1[i][1]]=arr1[i][2];
}
System.out.println("恢复后的二维数组");
for (int[] is : arr2) {
for (int c : is) {
System.out.print(c+" ");
}
System.out.println();
}
}
}
运行结果: