JAVA二维数组与稀疏数组转换,保存稀疏数组到磁盘遇到的一些问题

今天在学读取本地磁盘的文件时遇到了一些问题。
包括一下几个地方:
1.while循环内计数器记不准。
2.错用了两个for循环。
3.文件的分行读取与字符串剪切。
4.分析out_i出的循环,虽然有冗余和不正确,但不至于报错啊

import java.io.*;

public class SparseTest {
    public static void main(String[] args) {
        int[][] arr = new int[10][10];
        arr[0][3] = 1;
        arr[1][2] = 2;
        arr[2][3] = 2;
        int sum = 0;
        for (int[] ints : arr) {
            for (int anInt : ints) {
                System.out.print(anInt+"\t");
                if(anInt != 0) sum++;

            }
            System.out.println();
        }
        System.out.println(sum);
        int[][] sparseArr = new int[sum+1][3];
        int count = 0;
        sparseArr[0][0] = arr.length;
        sparseArr[0][1] = arr.length;
        sparseArr[0][2] = sum;

        for(int i = 0;i<arr.length;i++){
            for (int j = 0; j < arr.length; j++) {
                if(arr[i][j] != 0){
                    count++;
                    sparseArr[count][0] = i;
                    sparseArr[count][1] = j;
                    sparseArr[count][2] = arr[i][j];
                }
            }
        }
        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("正在写入数据到本地>>>>>>>>>");
      //  BufferedWriter bufferedWriter = null;
        FileWriter fos = null;

        try {
            fos = new FileWriter("map.txt",true);
            for (int[] ints : sparseArr) {
                for (int anInt : ints) {
                    try {
                        fos.write(anInt+"\t");//存入的数据乱码了!!!
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                fos.write("\n");
            }

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        System.out.println("完成数据写入到本地");

        //读取硬盘中的稀疏数组;
        BufferedReader br = null;
        int readRow = 0;//记录行数
//        String[] temp =null;//读取的数组
        int count_num = 0;
        //建新的稀疏数组
        int[][] sparseArr2 = new int[count+1][3];
        try {
            br = new BufferedReader(new FileReader("map.txt"));
            String line = null;
            //统计行数
           /* arr[0][3] = 1;
            arr[1][2] = 2;
            arr[2][3] = 2;*/
            while ((line = br.readLine()) !=null) { //调试发现line = 10\t10\t3 while循环了四次
                                                            //line = 0\t3\t1
                                                            //line = 1\t2\t2
                                                            //line = 2\t3\t2
                System.out.println("sparseArr2.length = "+sparseArr2.length);
                count_num++;  //187 190 194 ,每次的值都不确定
                String[] temp = line.split("\t");
                //out_i
                /*for (int i = 0; i < sparseArr2.length; i++) {//如果用了外层i循环自己就换循环四次,每次
                    for (int j = 0;j<temp.length;j++) {      //循环中i还会取0 1 2 3
                        if(i >= 4) break;
                        sparseArr2[i][j] = Integer.parseInt(temp[j]);
                         System.out.println("i:---"+i);
                    }
                }*/
                for (int j = 0;j<temp.length;j++) {
                    if(readRow >=4) break;
                    sparseArr2[readRow][j] = Integer.parseInt(temp[j]);

                    //System.out.println("readRow:---"+readRow);
                }
                readRow++;
            }

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (br!=null) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        //遍历稀疏数组
        for (int[] ints : sparseArr2) {
            for (int anInt : ints) {
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }
        System.out.println("count_num = "+count_num);

    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值