尚硅谷java数据结构与算法 韩顺平 稀疏数组源码 五子棋问题 实现了对磁盘的存储和读取

day1学习笔记

使用了IO流完成了对数据的存储和读取

 

 

package 稀疏矩阵;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;


public class SparseArray {
       public static void main(String[] args) throws FileNotFoundException, Exception {
        //创建原始二维数组 11*11
        //0表示没子 1表示黑子 2表示蓝子
         int chessArr1[][] = new int[11][11];
         chessArr1[1][2] = 1;
         chessArr1[2][3] = 2;
         System.out.println("原始的二维数组:");
         for (int[] row : chessArr1) {
            for(int data : row) {
                System.out.printf("%d\t",data);
            }
            System.out.println();
        }
         
         //将二维数组转换为稀疏数组
         //遍历二维数组得到非0数据的个数
         int sum = 0;
         for (int i = 0; i < chessArr1.length; i++) {
             for (int j = 0; j < chessArr1[i].length; j++) {
                if(chessArr1[i][j] != 0) {
                    sum++;
                }
            }
            
        }
         System.out.println("sum = "+sum);
         
         
         //创建对应的稀疏数组
         int sparseArr[][] = new int[sum +1][3];
         //给稀疏数组赋值
         sparseArr[0][0] =chessArr1.length; 
         sparseArr[0][1] = chessArr1[0].length;
         sparseArr[0][2] = sum;
         //遍历二维数组将非0的值存放到稀疏数组
         int count = 0;
         for (int i = 0; i < chessArr1.length; i++) {
             for (int j = 0; j < chessArr1[i].length; j++) {
                if(chessArr1[i][j] != 0) {
                    count++;
                    sparseArr[count][0] = i;
                    sparseArr[count][1] = j;
                    sparseArr[count][2] = chessArr1[i][j];
                }
            }
            
        }
         System.out.println();//换行
         System.out.println("得到的稀疏数组为:");
         for (int i = 0; i < sparseArr.length; i++) {
             System.out.printf("%d\t%d\t%d\t\n",sparseArr[i][0],sparseArr[i][1],sparseArr[i][2]);
            
        }
         System.out.println();
         
         
         
        //将稀疏数组恢复为原数组 
         int chessArr2[][] = new int[sparseArr[0][0]][sparseArr[0][1]];
         for (int i = 1; i < sparseArr.length; i++) {
                 chessArr2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
        }
         
         System.out.println("稀疏数组恢复后得到的原数组为:");
         for (int[] row : chessArr2) {
             for(int data : row) {
                 System.out.printf("%d\t",data);
             }
             System.out.println();
         }
         
         
         
         System.out.println("存储数据中。。。。。");
         File f = new File("F:/java资料/map.txt");
         FileOutputStream fos = new FileOutputStream(f);
         OutputStreamWriter outf=new OutputStreamWriter(fos,"UTF-8");
         for(int i=0;i<sparseArr.length;i++) {
             outf.write(String.valueOf(sparseArr[i][0]));
             outf.write(",");
             outf.write(String.valueOf(sparseArr[i][1]));
             outf.write(",");
             outf.write(String.valueOf(sparseArr[i][2]));
             outf.write(",");

         }
         outf.close();
         fos.close();
         System.out.println("存储成功");
         
         
         System.out.println("开始读取数据");
         Thread.sleep(3000);
         FileInputStream fis = new FileInputStream(f);
         InputStreamReader inf = new InputStreamReader(fis,"UTF-8");
         StringBuffer sb=new StringBuffer();
         while(inf.ready()){
             sb.append((char)inf.read());
         }
         inf.close();
         fis.close();
         System.out.println("读取成功");
         String ss=sb.toString();
         String[] sb1=sb.toString().split(",");
         System.out.println("读取数据字符串为:");
         System.out.println(ss);
         
         int num2=1;
        int[][] sp=new int[sb1.length/3][3];
        sp[0][0]=Integer.parseInt(sb1[0]);
        sp[0][1]=Integer.parseInt(sb1[1]);
        sp[0][2]=Integer.parseInt(sb1[2]);
        for(int i=3;i<sb1.length;i+=3){
            sp[num2][0]=Integer.parseInt(sb1[i]);
            sp[num2][1]=Integer.parseInt(sb1[i+1]);
            sp[num2][2]=Integer.parseInt(sb1[i+2]);
            num2++;
        }
        System.out.println("还原稀疏数组:");
        System.out.println("row"+"\t"+"col"+"\t"+"val");
        for(int[] row:sp){
            for(int data:row){
                System.out.printf("%d\t",data);
            }
            System.out.println();
        }
        
        int chessArr3[][] = new int[sp[0][0]][sp[0][1]];
        for (int i = 1; i < sp.length; i++) {
                 chessArr3[sp[i][0]][sp[i][1]] = sp[i][2];
        }
        
        System.out.println("稀疏数组恢复后得到的原数组为:");
        for (int[] row : chessArr3) {
            for(int data : row) {
                System.out.printf("%d\t",data);
            }
            System.out.println();
        }


         
           
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值