2020-11-12

标题Java数据结构初学写的一段关于稀疏数组的代码

创建开始类代码:

import java.io.BufferedWriter;import java.io.FileWriter;import java.io.IOException;/*创建一个二维数组保存五子棋残局,但是这样二维数组太臃肿了,将二维数组变成稀疏数组精简一下并将稀疏数组存入文件例:有一个11x11的棋盘,第1行6列有个黑棋子(1),第3行3列有个黑棋子(1),第6行6列有个白棋子(2)用二维数组表示出来,并将其稀疏化稀疏数组 行 列 值棋盘信息 11 11 3棋子信息 1 6 1 3 3 1 6 6 2步骤:1.创建二维数组 */public class WriterWuzq { public static void main(String[] args) throws IOException { //创建棋盘,没初始化的自动是零 int[][] qp = new int[11][11]; //写入残局 qp[1][6] = 1; qp[3][3] = 1; qp[6][6] = 2; qp[9][2] = 2; //遍历棋盘 System.out.println(“原本棋盘”); for(int[] q : qp) { for(int p : q) { System.out.printf("%d\t", p);//用输出控制语句输出 } System.out.println(); } //稀疏数组 //创建一个int变量记录有多少棋子,来决定创建几行储存 //遍历原始的二维数组,判断数组是否为0,不为零就代表有棋子个数加一 //将的到的棋子数的变量在加1,因为要一个来存储棋盘的大小和有多少棋子个数 //列固定为每行3列,用来存储每个棋盘的位置(x,y)坐标和值(黑棋还是白棋) //步骤 //创建计算变量 int sum=0; for(int[] q : qp) { for(int p : q) { //判断棋子个数 if(p != 0) { sum++; } } } //创建稀疏数组 int[][] sx = new int[sum+1][3]; //稀疏数组中存入原二维数组的棋盘信息和棋子个数 //创建变量,循环遍历二维数组,每遍历到一个棋子变量加1,将棋子信息写入稀疏数组, // 行号就是第几个棋子,因为每个棋子占一行的描述信息 // sx[0][0] = qp.length;//棋盘行数 sx[0][1] = qp[0].length;//棋盘列数 sx[0][2] = sum;//棋子个数 int count=0;//记录棋子个数 for(int q=0; q<qp.length; q++) { for (int p=0; p<qp[0].length; p++) { if(qp[q][p] != 0) { count++; sx[count][0] = q; sx[count][1] = p; sx[count][2] = qp[q][p]; } } } //遍历稀疏数组 System.out.println(“稀疏数组”); for(int[] s : sx) { for(int x : s) { System.out.printf("%d\t", x); } System.out.println(); } //将稀疏数组写入文档中 //先将稀疏数组的参数传入 //写入稀疏里面的数据信息那些,循环写入参数,每个棋子信息写一行将int变量转换成String, // 然后用Stringbuilder用逗号分隔拼接到一起,写入文件,结束条件,稀疏数组的行长度 BufferedWriter bw = new BufferedWriter(new FileWriter( “F:\Java数据结构和算法 韩顺平老师\数据结构和算法的笔记\稀疏数组\信息.txt”) ); StringBuilder sb = null; bw.write(String.valueOf(sx.length)+","+String.valueOf(sx[0].length)); bw.newLine(); for(int i=0; i<sx.length; i++) { sb = new StringBuilder();//这个千万不要在外面赋值,不然里面的内容不会自动清除 sb.append(String.valueOf(sx[i][0] )+",").append(String.valueOf(sx[i][1] )+",").append(String.valueOf(sx[i][2] ) ); bw.write(sb.toString() ); bw.newLine(); bw.flush(); } bw.close(); System.out.println(“写入完成!”); }}

恢复代码:

import java.io.BufferedReader;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;/*读取文件到稀疏数组中第一个数据读出创建稀疏数组循环读取里面的内容,创建String变量读取数据存放的字符串创建int变量,记录第几个数据将字符串用 , 切割然后 循环赋值 */public class ReaderWuzq { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new FileReader(“F:\Java数据结构和算法 韩顺平老师\数据结构和算法的笔记\稀疏数组\信息.txt”) ); String[] pro = br.readLine().split(","); int[][] sx = new int[Integer.parseInt(pro[0])][Integer.parseInt(pro[1])];// System.out.println(sx.length + “:” + sx[0].length); String reStr = null; int count=0;//局部变量必须付初值 while((reStr=br.readLine()) != null) {// System.out.println(reStr); String[] str = reStr.split(","); for(int i=0; i<str.length; i++) { sx[count][i] = Integer.parseInt(str[i]); } count++; } br.close(); //遍历集合 for (int[] s : sx) { for (int x : s) { System.out.printf("%d\t", x); } System.out.println(); } //将稀疏数组变成二维数组 //读取稀疏数组第一行信息创建二维数组 int[][] qp = new int[sx[0][0]][sx[0][1]]; //遍历稀疏数组赋值 for(int x=1; x<sx.length; x++) { qp[sx[x][0]][sx[x][1]] = sx[x][2]; } //恢复原来二维数组 System.out.println(“二维棋盘”); for(int[] q : qp) { for(int p : q) { System.out.printf("%d\t", p); } System.out.println(); } System.out.println(“读取数据成功!”); }}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值