package com.company;
/***
* 将棋盘以二维数组的形式保存,棋盘上有两颗棋子,保存时先将其转换为稀疏数组再保存,打开时再将稀疏数组转换为棋盘
*/
public class Main {
public static void main(String[] args) {
/***
* 将二维数组转换为稀疏数组
*/
//1.创建一个二维数组表示棋盘
int arr[][]=new int[11][11];
//给棋盘上的两颗棋子赋值,黑棋表示1,白棋表示2
arr[1][2]=1;
arr[2][3]=2;
//输出原始的二维数组
for (int[] row:arr){
for (int data:row){
System.out.printf("%d\t",data);
}
System.out.println();
}
//2.将二维数组转为稀疏数组,稀疏数组有三列的第一行的三列分别表示原始数组的行,列,有多少颗棋子,之后的行均表示为棋子所在的行,列以及其值
//查找棋盘上有多少颗棋子
int sum=0;
for(int i=0;i<arr.length;i++){
for (int j=0;j<arr[i].length;j++){
if (arr[i][j]!=0){
sum++;
}
}
}
System.out.println(sum);
//创建稀疏数组
int arr2[][]=new int[sum+1][3];
//给稀疏数组的第一行第一列赋值
arr2[0][0]=11;
arr2[0][1]=11;
arr2[0][2]=sum;
//count用于记录存放在稀疏数组的第几行(第几个非零数据)
int count=0;
for(int i=0;i<11;i++){
for (int j=0;j<11;j++){
if (arr[i][j]!=0){
count++;
arr2[count][0]=i;
arr2[count][1]=j;
arr2[count][2]=arr[i][j];
}
}
}
//输出稀疏数组
System.out.println();
System.out.println("得到的稀疏数组为------");
for (int i=0;i<arr2.length;i++){
System.out.printf("%d\t%d\t%d\t\n",arr2[i][0],arr2[i][1],arr2[i][2]);
}
/***
* 将稀疏数组转换我二维数组
*/
//1.根据稀疏数组的第一行创建一个棋盘
int arr3[][]=new int[arr2[0][0]][arr2[0][1]];
//2.遍历稀疏数组并赋予相应的值
for (int i=1;i<arr2.length;i++){
//将第i行的值赋给arr3
arr3[arr2[i][0]][arr2[i][1]]=arr2[i][2];
}
System.out.println("arr3为:");
for (int[] row:arr3){
for (int data:row){
System.out.printf("%d\t",data);
}
System.out.println();
}
}
}
java之二维数组和稀疏数组的相互转换
最新推荐文章于 2024-07-19 17:37:28 发布