已有条件
arr1,值只能为0,1,2
下面为创建arr1和输出arr1
int[][] arr1=new int[11][11];
arr1[1][2]=1;
arr1[2][3]=2;
for (int[] ints : arr1) {
for (int anInt : ints) {
System.out.print(anInt+" ");
}
System.out.println();
}
创建稀疏数组
arr2,表示的方法
第一行是表示行列的规模,与arr1的值没有关系
//遍历二维数组进行将arr1里的非0的值存放在arr2
int count=0;
for (int i = 0; i < arr1.length; i++) {
for (int j = 0; j < arr1[i].length; j++) {
if(arr1[i][j]!=0){
count++;
arr2[count][0]=i;//第0行是不存arr1里面的值的
arr2[count][1]=j;//count是至少从1开始表示第一个值
arr2[count][2]=arr1[i][j];//因为arr2[0]上面以及定义了//这也是为什么定义arr2时需要sum+1了
}
}
}
//输出稀疏数组
for (int i = 0; i < arr2.length; i++) {
System.out.println(arr2[i][0]+" "+
arr2[i][1]+" "+
arr2[i][2]+" "
/*11 11 2
1 2 1
2 3 2 */
//上面的运行结果表示有一个arr1数组11行11列有两个有效数组
//1行2列的数为1
//2行3列的数为2
);
}
还原稀疏数组
arr3,主要注意输入的对应每一个[ ]表示什么
System.out.println("还原");
//1.读取稀疏数组
int[][] arr3=new int[arr2[0][0]][arr2[0][1]];
//2.进行赋值
for (int i = 1; i < arr2.length; i++) {
arr3[arr2[i][0]][arr2[i][1]]=arr2[i][2];//arr2[i][2]=表示值
}
for (int[] ints : arr3) {
for (int anInt : ints) {
System.out.print(anInt+" ");
}
System.out.println();
}
核心部分
1.arr2数组的定义
int[][]arr2=new int[sum+1][3];
arr2[0][0]=11;
arr2[0][1]=11;
arr2[0][2]=sum+1;
int count=0;
for (int i = 0; i < arr1.length; i++) {
for (int j = 0; j < arr1.length; j++) {
if(arr1[i][j]!=0){
count++;
arr2[count][i]=i;
arr2[count][j]=i;
arr2[count][2]=arr1[i][j];
}
}
数组arr3的还原
System.out.println("还原");
//1.读取稀疏数组
int[][] arr3=new int[arr2[0][0]][arr2[0][1]];
//2.进行赋值
for (int i = 1; i < arr2.length; i++) {
arr3[arr2[i][0]][arr2[i][1]]=arr2[i][2];//arr2[i][2]=表示值
}
for (int[] ints : arr3) {
for (int anInt : ints) {
System.out.print(anInt+" ");
}
System.out.println();
}
整体代码
package Array;
import java.io.PrintStream;
//稀疏数组 //黑白棋//0就是没有棋子,1表示黑棋2表示白棋
public class Demo08 {
public static void main(String[] args) {
//定义一个二位数组
int[][] arr1=new int[11][11];
arr1[1][2]=1;
arr1[2][3]=2;
for (int[] ints : arr1) {
for (int anInt : ints) {
System.out.print(anInt+" ");
}
System.out.println();
}
//转换为稀疏数组保存
//1.获取有效值的个数
int sum=0;
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if (arr1[i][j]!=0){
sum++;
}
}
}
System.out.println("有效值的个数:"+sum);//sum=2
//创建一个稀疏数组的数组//作用是保存数值的位置和值
//所以需要判断sum然后利用sum+1表示需要存多少个值
//3是固定的arr[x的位置][y的位置]=对应的值;
int[][]arr2=new int[sum+1][3];
arr2[0][0]=11;//表示存了多少行
arr2[0][1]=11;//表示存了多少列
arr2[0][2]=sum;//表示存了多少个值
//遍历二维数组进行将arr1里的非0的值存放在arr2
int count=0;
for (int i = 0; i < arr1.length; i++) {
for (int j = 0; j < arr1[i].length; j++) {
if(arr1[i][j]!=0){
count++;
arr2[count][0]=i;//第0行是不存arr1里面的值的
arr2[count][1]=j;//count是至少从1开始表示第一个值
arr2[count][2]=arr1[i][j];//因为arr2[0]上面以及定义了//这也是为什么定义arr2时需要sum+1了
}
}
}
//输出稀疏数组
for (int i = 0; i < arr2.length; i++) {
System.out.println(arr2[i][0]+" "+
arr2[i][1]+" "+
arr2[i][2]+" "
/*11 11 2
1 2 1
2 3 2 */
//上面的运行结果表示有一个arr1数组11行11列有两个有效数组
//1行2列的数为1
//2行3列的数为2
);
}
System.out.println("还原");
//1.读取稀疏数组
int[][] arr3=new int[arr2[0][0]][arr2[0][1]];
//2.进行赋值
for (int i = 1; i < arr2.length; i++) {
arr3[arr2[i][0]][arr2[i][1]]=arr2[i][2];//arr2[i][2]=表示值
}
for (int[] ints : arr3) {
for (int anInt : ints) {
System.out.print(anInt+" ");
}
System.out.println();
}
}
}