• 二维数组 和 稀疏数组的相互转换 及 数据存入文件中


    二维数组  和 稀疏数组的相互转换 及 数据存入文件中

    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.Writer;
    
    /*
    稀疏数组 和 二维数组
     */
    public class SparseArray {
        public static void main(String[] args) throws IOException {
    
            //原始的二维数组的大小
            int[][] array = new int[11][11];
            array[1][3] = 1;
            array[2][4] = 2;
            array[2][5] = 2;
            array[2][7] = 2;
    
            System.out.println("原始的二维数据");
            for (int[] row : array) {
                for (int data : row) {
                    System.out.printf("%d	", data);
                }
                System.out.println();
            }
            //获取sum的个数
            int sum = 0;
            for (int i = 0; i < 11; i++) {
                for (int j = 0; j < 11; j++) {
                    if (array[i][j] != 0) {
                        sum++;
                    }
                }
            }
    
            //创建稀疏数组
            int[][] parse = new int[sum + 1][3];
            parse[0][0] = 11;
            parse[0][1] = 11;
            parse[0][2] = sum;
            //稀疏数组赋值
            int count = 0;
            for (int i = 0; i < 11; i++) {
                for (int j = 0; j < 11; j++) {
                    if (array[i][j] != 0) {
                        count++;
                        parse[count][0] = i;
                        parse[count][1] = j;
                        parse[count][2] = array[i][j];
    
                    }
                }
            }
            //打印输出稀疏数组
            for (int i = 0; i < parse.length; i++) {
                System.out.printf("%d	%d	%d	
    ", parse[i][0], parse[i][1], parse[i][2]);
            }
            System.out.println();
            //1.创建源
            File dest = new File("SpasreArray.data");
            //2.选择流:之所以选择字符流进行操作,主要由于其比字节流分割字符相比有分割方便的方法
            Writer os = null;
            os = new FileWriter(dest);
            //3.进行数据的拷贝,其中	,即table符号,作为数字的分隔符(主要是数字的位数在此例中是不确定的)
            for (int i = 0; i < parse.length; i++) {
                for (int j = 0; j < 3; j++) {
                    os.write(parse[i][j] + "	");
                }
                os.write("
    ");
            }
            //4.释放资源
            os.close();


    System.out.println("稀疏数组恢复二维数组");
    int [][]array1 = new int[parse[0][0]][parse[0][1]];
    for (int i = 1; i < parse.length; i++) {
    array1[parse[i][0]][parse[i][1]] = parse[i][2];
    }

    for (int[] row : array1) {
    for (int data : row) {
    System.out.printf("%d ",data);
    }
    System.out.println();
    }
    } }
    控制台打印
    "
    C:Program FilesJavajdk1.8.0_91injava.exe" "-javaagent:D:IntelliJ IDEA 2018.2.4libidea_rt.jar=56550:D:IntelliJ IDEA 2018.2.4in" -Dfile.encoding=UTF-8 -classpath "C:Program FilesJavajdk1.8.0_91jrelibcharsets.jar;C:Program FilesJavajdk1.8.0_91jrelibdeploy.jar;C:Program FilesJavajdk1.8.0_91jrelibextaccess-bridge-64.jar;C:Program FilesJavajdk1.8.0_91jrelibextcldrdata.jar;C:Program FilesJavajdk1.8.0_91jrelibextdnsns.jar;C:Program FilesJavajdk1.8.0_91jrelibextjaccess.jar;C:Program FilesJavajdk1.8.0_91jrelibextjfxrt.jar;C:Program FilesJavajdk1.8.0_91jrelibextlocaledata.jar;C:Program FilesJavajdk1.8.0_91jrelibext ashorn.jar;C:Program FilesJavajdk1.8.0_91jrelibextsunec.jar;C:Program FilesJavajdk1.8.0_91jrelibextsunjce_provider.jar;C:Program FilesJavajdk1.8.0_91jrelibextsunmscapi.jar;C:Program FilesJavajdk1.8.0_91jrelibextsunpkcs11.jar;C:Program FilesJavajdk1.8.0_91jrelibextzipfs.jar;C:Program FilesJavajdk1.8.0_91jrelibjavaws.jar;C:Program FilesJavajdk1.8.0_91jrelibjce.jar;C:Program FilesJavajdk1.8.0_91jrelibjfr.jar;C:Program FilesJavajdk1.8.0_91jrelibjfxswt.jar;C:Program FilesJavajdk1.8.0_91jrelibjsse.jar;C:Program FilesJavajdk1.8.0_91jrelibmanagement-agent.jar;C:Program FilesJavajdk1.8.0_91jrelibplugin.jar;C:Program FilesJavajdk1.8.0_91jrelib esources.jar;C:Program FilesJavajdk1.8.0_91jrelib t.jar;E:idearprojectTest1outproductionTest1" SparseArray 原始的二维数据 0 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 2 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 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 打印二维数组转换为稀疏数组 11 11 4 1 3 1 2 4 2 2 5 2 2 7 2 稀疏数组恢复二维数组 0 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 2 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 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 Process finished with exit code 0

    本地文件:

    11    11    4    
    1    3    1    
    2    4    2    
    2    5    2    
    2    7    2    

     读取本地文件的数组到稀疏数组中:

    /**
             * 二、将本地文件map.data转换为稀疏数组
             */
    
            //1.创建源
            File src = new File("SpasreArray.data");
            //2.选择流
            BufferedReader in = new BufferedReader(new FileReader(src));
            //3.1进行数据的搬移,但是数组首要考虑的事情是数组要多大?
            int row =0;//用于创建要创建的二维稀疏数组的大小确定
            String line; //一行数据
            //逐行读取,并将每个数组放入到数组中
            while ((line = in.readLine()) != null) {
                row++;
            }
            int sparseArr2[][] = new int [row][3];
            //3.2文本数据转移到稀疏数组中
            int rowtmp = 0;
            //由于读取完毕整个文本文档,所以不妨”重启“流
            in.close();
            in = new BufferedReader(new FileReader(src));
            while ((line = in.readLine()) != null) {
                String[] temp = line.split("	");
                for (int j = 0; j < temp.length; j++) {
                    sparseArr2[rowtmp][j]=Integer.parseInt(temp[j]);
                }
                rowtmp++;
            }
            //4.关闭流
            in.close();
            //验证文件读取是否正确
            System.out.println("文件读取数据");
            for(int[]temp1:sparseArr2) {
                for (int temp2 : temp1) {
                    System.out.printf("%d	", temp2);
                }
                System.out.println();
            }

    完整代码:

    import java.io.*;
    
    /*
    稀疏数组 和 二维数组
     */
    public class SparseArray {
        public static void main(String[] args) throws IOException {
    
            //原始的二维数组的大小
            int[][] array = new int[11][11];
            array[1][3] = 1;
            array[2][4] = 2;
            array[2][5] = 2;
            array[2][7] = 2;
    
            System.out.println("原始的二维数据");
            for (int[] row : array) {
                for (int data : row) {
                    System.out.printf("%d	", data);
                }
                System.out.println();
            }
            //获取sum的个数
            int sum = 0;
            for (int i = 0; i < 11; i++) {
                for (int j = 0; j < 11; j++) {
                    if (array[i][j] != 0) {
                        sum++;
                    }
                }
            }
    
            //创建稀疏数组
            int[][] parse = new int[sum + 1][3];
            parse[0][0] = 11;
            parse[0][1] = 11;
            parse[0][2] = sum;
            //稀疏数组赋值
            int count = 0;
            for (int i = 0; i < 11; i++) {
                for (int j = 0; j < 11; j++) {
                    if (array[i][j] != 0) {
                        count++;
                        parse[count][0] = i;
                        parse[count][1] = j;
                        parse[count][2] = array[i][j];
    
                    }
                }
            }
            //打印输出稀疏数组
            System.out.println("打印二维数组转换为稀疏数组");
            for (int i = 0; i < parse.length; i++) {
                System.out.printf("%d	%d	%d	
    ", parse[i][0], parse[i][1], parse[i][2]);
            }
            System.out.println();
            //1.创建源
            File dest = new File("SpasreArray.data");
            //2.选择流:之所以选择字符流进行操作,主要由于其比字节流分割字符相比有分割方便的方法
            Writer os = null;
            os = new FileWriter(dest);
            //3.进行数据的拷贝,其中	,即table符号,作为数字的分隔符(主要是数字的位数在此例中是不确定的)
            for (int i = 0; i < parse.length; i++) {
                for (int j = 0; j < 3; j++) {
                    os.write(parse[i][j] + "	");
                }
                os.write("
    ");
            }
            //4.释放资源
            os.close();
    
            //打印稀疏数组
            //System.out.println("稀疏数组的二维数据");
    //        for (int[] row : parse) {
    //            for (int data : row) {
    //                System.out.printf("%d	",data);
    //            }
    //            System.out.println();
    //        }
    //        for (int i = 0; i < parse.length; i++) {
    //            System.out.printf("%d	%d	%d	
    ",parse[i][0],parse[i][1],parse[i][2]);
    //        }
    //        System.out.println();
    //
            System.out.println("稀疏数组恢复二维数组");
            int [][]array1 = new int[parse[0][0]][parse[0][1]];
            for (int i = 1; i < parse.length; i++) {
                array1[parse[i][0]][parse[i][1]] = parse[i][2];
            }
    
            for (int[] row : array1) {
                for (int data : row) {
                    System.out.printf("%d	",data);
                }
               System.out.println();
            }
    
    
    
            /**
             * 二、将本地文件map.data转换为稀疏数组
             */
    
            //1.创建源
            File src = new File("SpasreArray.data");
            //2.选择流
            BufferedReader in = new BufferedReader(new FileReader(src));
            //3.1进行数据的搬移,但是数组首要考虑的事情是数组要多大?
            int row =0;//用于创建要创建的二维稀疏数组的大小确定
            String line; //一行数据
            //逐行读取,并将每个数组放入到数组中
            while ((line = in.readLine()) != null) {
                row++;
            }
            int sparseArr2[][] = new int [row][3];
            //3.2文本数据转移到稀疏数组中
            int rowtmp = 0;
            //由于读取完毕整个文本文档,所以不妨”重启“流
            in.close();
            in = new BufferedReader(new FileReader(src));
            while ((line = in.readLine()) != null) {
                String[] temp = line.split("	");
                for (int j = 0; j < temp.length; j++) {
                    sparseArr2[rowtmp][j]=Integer.parseInt(temp[j]);
                }
                rowtmp++;
            }
            //4.关闭流
            in.close();
            //验证文件读取是否正确
            System.out.println("文件读取数据");
            for(int[]temp1:sparseArr2) {
                for (int temp2 : temp1) {
                    System.out.printf("%d	", temp2);
                }
                System.out.println();
            }
    
    
        }
    }
  • 相关阅读:
    Linux:修改Shell命令提示符及颜色
    Linux:cut命令详解
    pageadmin去掉xxx
    高手详解SQL性能优化十条经验
    一道简单递归题
    list<?>转换成 对应的 class
    《一道笔试题》找出最连续数字的最大长度
    poi 获取excel数据 导入数据库
    有一个5ml 的瓶子 和3ml 的瓶子 和 很多水 现在 要取出4ml的水 请写出编程 多种解法
    假设字符串类似这样的aba和aab,abc和bca就相等,现在随便给你二组字符串,请编程比较他们看是否相等
  • 原文地址:https://www.cnblogs.com/zhukaixin/p/11524282.html
Copyright © 2020-2023  润新知