目录

用二维数组来表示一个棋盘:

将二维数组转换为稀疏数组

1.先遍历二维数组,得到非0数据的个数

2.创建稀疏数组

3.输出稀疏数组

利用io流实现与本地文件的交互

①.把稀疏数组存入本地文件中

②.把二维数组从本地文件中取出来

4.把稀疏数组还原成二维数组

5.输出这个二维数组

用二维数组来表示一个棋盘:

创建一个原始的二维数组 11*11
0表示没有棋子 1表示黑子 2表示蓝子
int[][] chessArray = new int[11][11];chessArray[1][2] = 1;chessArray[2][3] = 2;chessArray[6][6] = 2;for (int[] i : chessArray) {for (int e : i) {System.out.print(e + "\t");}System.out.println();}

0    0    0    0    0    0    0    0    0    0    0    
0    0    1    0    0    0    0    0    0    0    0    
0    0    0    2    0    0    0    0    0    0    0    
0    0    0    0    0    0    0    0    0    0    0    
0    0    0    0    0    0    0    0    0    0    0    
0    0    0    0    0    0    0    0    0    0    0    
0    0    0    0    0    0    2    0    0    0    0    
0    0    0    0    0    0    0    0    0    0    0    
0    0    0    0    0    0    0    0    0    0    0    
0    0    0    0    0    0    0    0    0    0    0    
0    0    0    0    0    0    0    0    0    0    0

将二维数组转换为稀疏数组

1.先遍历二维数组,得到非0数据的个数

int sum = 0;for (int i = 0; i < 11; i++) {for (int j = 0; j < 11; j++) {if (chessArray[i][j] != 0) {sum++;}}}

2.创建稀疏数组

int[][] sparseArray2 = new int[sum + 1][3];sparseArray2[0][0] = 11;sparseArray2[0][1] = 11;sparseArray2[0][2] = sum;int count = 0;//用来记录是第几个非 0 数据for (int i = 0; i < 11; i++) {for (int j = 0; j < 11; j++) {if (chessArray[i][j] != 0) {count++;sparseArray2[count][0] = i;sparseArray2[count][1] = j;sparseArray2[count][2] = chessArray[i][j];}}}

3.输出稀疏数组

System.out.println();System.out.println("得到的稀疏数组为:");for (int[] i : sparseArray2) {for (int d : i) {System.out.print(d + "\t");}System.out.println();}

得到的稀疏数组为:
11    11    3    
1    2    1    
2    3    2    
6    6    2

利用io流实现与本地文件的交互

①.把稀疏数组存入本地文件中

FileWriter fw = null;try {File file = new File("array");fw = new FileWriter(file);for (int i = 0; i < sparseArray2.length; i++) {for (int j = 0; j < 3; j++) {fw.write(sparseArray2[i][j] + " ");}fw.write("\n");}} catch (IOException e) {e.printStackTrace();} finally {if (fw != null) {try {fw.close();} catch (IOException e) {e.printStackTrace();}}}

②.把二维数组从本地文件中取出来

int[][] ints = null;BufferedReader br = null;try {FileReader fr = new FileReader("array");br = new BufferedReader(fr);ArrayList<String> arrayList = new ArrayList<>();String s;while ((s = br.readLine()) != null) {arrayList.add(s);}int size = arrayList.size();ints = new int[size][3];int cou = 0;for (String ss : arrayList) {String[] strs = ss.split(" ");//这里划分用的空格!!!帅!!!!for (int i = 0; i < 3; i++) {ints[cou][i] = Integer.valueOf(strs[i]);}cou++;}} catch (IOException e) {e.printStackTrace();} finally {if (br != null) {try {br.close();} catch (IOException e) {e.printStackTrace();}}}

4.把稀疏数组还原成二维数组

//        创建二维数组int[][] chees = new int[ints[0][0]][ints[0][1]];int c = ints[0][2];//        把稀疏数组的数据还原回去 //多思考用普通的for循环可以指定从第几行开始循环,用增强for循环就难了for (int i = 1; i <= c; i++) {chees[ints[i][0]][ints[i][1]] = ints[i][2];}

5.输出这个二维数组

System.out.println();System.out.println("还原的二维数组为:");for (int[] i : chees) {for (int e : i) {System.out.print(e + "\t");}System.out.println();}

还原的二维数组为:
0    0    0    0    0    0    0    0    0    0    0    
0    0    1    0    0    0    0    0    0    0    0    
0    0    0    2    0    0    0    0    0    0    0    
0    0    0    0    0    0    0    0    0    0    0    
0    0    0    0    0    0    0    0    0    0    0    
0    0    0    0    0    0    0    0    0    0    0    
0    0    0    0    0    0    2    0    0    0    0    
0    0    0    0    0    0    0    0    0    0    0    
0    0    0    0    0    0    0    0    0    0    0    
0    0    0    0    0    0    0    0    0    0    0    
0    0    0    0    0    0    0    0    0    0    0

以五子棋为背景的二维数组和稀疏数组(节省空间)的转换、用io流实现本地磁盘的存储相关推荐

  1. HDU2642(二维的树状数组)

    二维的树状数组,我记得是模版!^ _ ^ 题意很清楚:就是这部分的原理:sum(x1,y1)+sum(x2-1,y2-1)-sum(x1,y2-1)-sum(x2-1,y1);其实可以和概率论中的一个 ...

  2. 间接通过new 来申请一个二维的堆内存数组

    我们知道无法直接通过new 来申请一个二维的堆内存数组,于是有人想出了这样一个办法:创建一个一维堆内存指针数组,即每个数组元素是一个指针,然后用new 给各个指针分配一个一维的堆内存数组,那么最后表示 ...

  3. 二维数组转稀疏数组,写入文件后再读取文件,将内容转回二维数组

    该方法模拟的是将棋盘的位置保存到稀疏数组中,降低存储的数据量,通过写入磁盘做持久化,再读入后恢复棋盘内容. package com.moson.sparsearray;import java.io.* ...

  4. 数据结构学习-二维数组与稀疏数组转换

    package 稀疏数组和队列;public class 稀疏数组 {public static void main(String[] args) {// TODO Auto-generated me ...

  5. Java实现二维数组和稀疏数组的转换

    文章目录 稀疏数组 二维数组-->稀疏数组 稀疏数组-->二维数组 完整code 稀疏数组 简介:当编写的二维数组中存在很多不用的点但初始化时都赋值为0时,这个二维数组的观赏性很低并且非常 ...

  6. 减小程序规模!稀疏数组Sparsearray,数据结构二维数组与稀疏数组转换,Java实现

    文章目录 基本介绍 应用实例 基本介绍 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组. 稀疏数组的处理方法是: ①记录数组一共有几行几列,有多少个不同的值(0除外) ...

  7. 二维数组转化稀疏数组

    二维数组转化为稀疏数组,稀疏数组写到磁盘,读取磁盘数据文件map.data,还原为稀疏数组,稀疏数组还原为二维数组. package sparseArray;/*** 11*11二维数组转稀疏数组** ...

  8. matlab 三维数组运算,MATLAB二维三维画图仿真数组运算

    MATLAB二维三维画图仿真数组运算 1. 数学 (1) 数组运算: x=[1 2 3 4]; y=[3 4 5 6]; z=x+y %数组x与数组y相加得到数组z z = 4 6 8 10 z=x- ...

  9. 关于图的二维矩阵转为一维数组的理解。

    一开始看二维矩阵转为一维数组的时候还是有点懵的,为啥是N(N+1)/2呢,为啥不是N*N/2呢,这个矩阵明明是N*N的一个正方形啊,我要省一半空间直接除2不就行了,带着这个问题我观察了一下这个PPT里 ...

最新文章

  1. python3和Python2的区别
  2. php设置html全局路径_全局:语言包配置
  3. java策略管理_详解Java编程中的策略模式
  4. python手机版iphone-Python编程狮下载
  5. sprite的大小 unity_[Unity]SpriteShape与atlas的小坑
  6. ViewResolvers
  7. CountDownLatch应用及原理
  8. Android平台和java平台 DES加密解密互通程序及其不能互通的原因
  9. wait_event_interruptible 在驱动中的应用
  10. shiro springboot 整合
  11. mysql 连接 110 超时_Nginx和mysql上行超时超时(110:连接超时)
  12. WindowsXP、Windows2003本地密码清除方法
  13. gluster安装完全指南
  14. java网络爬虫电影数据,Java豆瓣电影爬虫——减少与数据库交互实现批量插入
  15. 2020年阴历二月二十六 投资理财~读万科财报有感
  16. 兄弟连Linux笔记
  17. -------已搬运------SQL注入的 过滤 思路 payload 万能密码
  18. 中国细菌学试验市场趋势报告、技术动态创新及市场预测
  19. 解读SIM卡、USIM卡、UICC卡、eSIM卡的区别
  20. 【原创干货】6000字、22个案例详解Pandas数据分析/预处理时的实用技巧,超简单...

热门文章

  1. iOS每日一记------------之 中级完美大整理
  2. 虚拟机当服务器的设置,虚拟机当作设置服务器
  3. 普通二本,毕业三年,北漂之后,我是怎么成为程序猿的。
  4. legend分栏 matlab_Matlab中legend位置
  5. MBC打造韩流主题公园,虚拟现实成看点
  6. matlab 奇异谱分析,SSA寻北-奇异谱分析
  7. 推动量子计算与AI融合,飞桨成为中国首个支持量子机器学习的深度学习平台
  8. 软件开发成本太高,怎么办?
  9. No.3 课程综述 | Flink 知其然,知其所以然
  10. 自然河流河型一般分类