java实现二维数组和稀疏数组的转化并保存在文件中去

本文介绍了如何使用Java将二维数组转换为稀疏数组,并将转换后的稀疏数组保存到文件中。详细阐述了实现过程和相关代码实现。

实现的思路:

实现代码:

public class SparseArray_a {
    // 原始的棋盘是有11*11
    // 有两个棋子,在 1,2 和 2,3 这两个地方
    // 其中0 代表空的 1 代表黑子 2 代表 蓝子

    public static void main(String[] args) {
        int chessArr[][] = new int[11][11];
        chessArr[1][2] = 1;
        chessArr[2][3] = 2;
        chessArr[4][6] = 1;
        // 输出原始的二维数组
        for (int[] row:chessArr) {
            for (int data:row ) {
                System.out.printf("%d\t",data);
            }
            System.out.println();
        }

        // 计算得到一共有多少个棋子
        int sum = 0;
        for (int i = 0; i < 11; i++){
            for (int j = 0; j < 11; j++) {
                if(chessArr[i][j] != 0){
                    sum ++;
                }
            }
        }
        System.out.println("一共有棋子:"+sum);
        // 创建稀疏数组
        int chessArr2[][] = new int[sum+1][3];
        chessArr2[0][0] = 11;// 一共是多少行
        chessArr2[0][1] = 11;// 一共是多少列
        chessArr2[0][2] = sum;// 有几个值

        int count = 0;// 计数器
        for (int i = 0; i < 11; i++){
            for (int j = 0; j < 11; j++) {
                if(chessArr[i][j] != 0){
                    count ++;
                    chessArr2[count][0] = i;
                    chessArr2[count][1] = j;
                    chessArr2[count][2] = chessArr[i][j];
                }
            }
        }

        System.out.println("稀疏数组~~~~");
        // 输出稀疏数组
        for (int i = 0; i<chessArr2.length;i++){
            System.out.printf("%d\t%d\t%d\t\n",chessArr2[i][0],chessArr2[i][1],chessArr2[i][2]);
        }

        // 将稀疏数组保存到文件中去
        try {
            OutputStream os = new FileOutputStream("xishu.txt");
            PrintStream ps = new PrintStream(os);
            for (int i = 0; i <= sum; i++) {
                for (int j = 0; j <3 ; j++) {
                    ps.print(chessArr2[i][j]+",");
                }
                ps.println();
            }
            ps.close();
            os.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

***********在文件中读取并且转化********************

        // 从文件中读取稀疏数组
        String[] arr = new String[1024];
        try {
            BufferedReader bd = new BufferedReader(new FileReader("xishu.txt"));

            String line = null;
            int number = 0;
            while( (line = bd.readLine()) != null){
                arr[number] = line;
                number++;
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("从文件中读取的数组。。。");
        // 输出从文件读取的数组
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] != null){
                System.out.println(arr[i]);
            }
        }

        //将数组进行转化
        String[] arr1 = arr[0].split(",");
        int a[] = new int[3];
        for (int i = 0; i < arr1.length; i++) {
            a[i] = Integer.parseInt(arr1[i]);
        }
        int sum1 = a[2];
        int chessArr4[][] = new int[a[0]][a[1]];
        for (int i = 1; i <= a[2]; i++) {
            String b[] = arr[i].split(",");
            int c[] = new int[b.length];
            for (int j = 0; j < b.length; j++) {
                c[j] = Integer.parseInt(b[j]);
            }
            chessArr4[c[0]][c[1]] = c[2];
        }

        // 从文件读取以后的稀疏数组转化为二维数组
        System.out.println("从文件读取以后的稀疏数组转化为二维数组");
        for (int[] row:chessArr4 ) {
            for (int data:row) {
                System.out.printf("%d\t",data);
            }
            System.out.println();
        }

***********未在文件中读取并且转化********************

        // 将稀疏数组转化为二维数组
        System.out.println("稀疏数组转化为二维数组~~~");
        int chessArr3[][] = new int[chessArr2[0][0]][chessArr2[0][1]];
        // 将初始化的二维数组赋值为0--> 其实这一步不需要的,因为默认为0
//        for (int i = 0; i < chessArr2[0][0]; i++){
//            for (int j = 0; j < chessArr2[0][1]; j++) {
//                chessArr3[i][j] = 0;
//            }
//        }
        // 将稀疏数组中的值赋值给二维维数组
        for (int i = 1; i <= sum ; i++) {
           chessArr3[chessArr2[i][0]][chessArr2[i][1]] = chessArr2[i][2];
        }

        // 输出转化以后的二维数组
        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、付费专栏及课程。

余额充值