二维数组和稀疏数组的相互转换

介绍

1.转换原因我们把围棋盘或者五子棋盘看做一个二维数组,当我们的棋子不够多时,其实很多值都是默认值0,我们为了节约空间,就会使用稀疏数组。
2.放弃转换 如果转换为稀疏数组会使得空间冗余,比如说,我一个10乘10的二维数组放满了棋子,我本来只需要10乘10,但是稀疏数组需要101*3.就没有必要。

思路

在这里插入图片描述
这就是二维数组和稀疏数组相互转换的图,然后大家可以跟着思路去自己先试着写一遍,因为这个实际上都还没涉及到算法,只是一个思路变换。(相信当你在看这个时候,你应该已经过了java基础阶段)

二维数组转稀疏数组

package com.etime11;
//二维数组和稀疏数组的相互转换
public class Test01 {
	public static void main(String[] args) {
		int[][]array=new int[11][11];   //创建一个二维数组当一个五子棋盘
		array[2][3]=1;    //1为黑子
		array[3][4]=2;     //2为白子
		array[0][5]=1;
		array[6][9]=2;
		int len=array.length;   //获取数组长度
		System.out.println("查看建立好的五子棋盘");
		int sum=0;    //为了统计二维数组里面不为0的个数
		for(int[] array1:array) {
			for(int i:array1){
				//System.out.printf("%d\t",i);   //“\t”缩进    “\n”换行
				System.out.print(i+"\t");  //为什么用"\t"呢,缩进,让格式更自然(如果是11)
				//System.out.print(i+"  ");  //输出这个二维数组
				if(i!=0) {
					sum=sum+1;
				}
			}
			System.out.println();//什么都不再添加进行换行(我加入一个参数(为空)以后再换行)
		}
		System.out.println("查看完毕");
		System.out.println("棋盘上有"+sum+"个棋子");
		System.out.println();   //换行
		
		System.out.println("开始二维数组转稀疏数组");
		System.out.println(".............");			
		int[][]array2=new int[sum+1][3];   //创建稀疏数组
		array2[0][0]=11;
		array2[0][1]=11;
		array2[0][2]=sum;   //先赋值二维数组第一行
		int count=0;   //为了稀疏数组的下标可以变化(第几行)
		for(int i=0;i<len;i++) {
			for(int j=0;j<len;j++) {
				if(array[i][j]!=0) {
					++count;   //第几行的值,因为下标从0开始
					array2[count][0]=i;
					array2[count][1]=j;
					array2[count][2]=array[i][j];   //对稀疏数组进行赋值
				}
			}
		}
		System.out.println("转换成功");
		System.out.println("查看稀疏数组");
		for(int[]arr:array2) {
			for(int i:arr) {
				System.out.print(i+"\t");
			}
			System.out.println();
		}
		System.out.println("完成稀疏数组的查看");
		System.out.println();   //换行
	}
}

稀疏数组转二维数组

建立在 上面的System.out.println(); //换行之后

	System.out.println("稀疏数组返回到二维数组");
		System.out.println("开始转换");
		System.out.println("............");
		int[][]array3=new int [array2[0][0]][array2[0][1]]; //从稀疏数组第一行得到行列创建二维数组
		for(int i=1;i<sum+1;i++) {
			array3[array2[i][0]][array2[i][1]]=array2[i][2];   //对二维数组进行赋值
		} 
		System.out.println("转换成功");
		System.out.println("开始查看原始二维数组");
		for(int[]arr :array3) {    //增强for循环输出二维数组
			for(int i:arr) {
				System.out.print(i+"\t");
			}
			System.out.println();   //换行
		}
		System.out.println("game  over");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值