天天看點

java将二維數組轉為稀疏數組儲存到本地并讀取本地檔案轉為二維數組

package sparsearray;

import java.io.*;

public class SparseArray {

public static void main(String[] args) {
    //建立一個原始的二維數組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 count = 0;
    for (int[] row : chessArr1) {
        for (int data : row) {
            if(data != 0) {
                count++;
            }
        }
    }
    System.out.println("原始二維數組不為0的的個數為:"+count);

    //定義稀疏數組
    int[][] sparseArr = new int[count+1][3];

    //稀疏數組第一行的值
    sparseArr[0][0] = chessArr1.length;
    sparseArr[0][1] = chessArr1[0].length;
    sparseArr[0][2] = count;


    //為稀疏數組其他行指派
    int count2 = 0;//記錄是第幾個非零的資料
    for (int i = 1;i<chessArr1.length;i++) {
        for (int j = 0;j<chessArr1[0].length;j++) {
            if (chessArr1[i][j]!=0) {
                count2++;
                sparseArr[count2][0] = i;
                sparseArr[count2][1] = j;
                sparseArr[count2][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("開始寫入檔案<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");
    //将稀疏數組儲存到磁盤E:\java\repos\idea_repos\DataStructures\src\sparsearray\data.txt,檔案名為data.txt
    BufferedWriter out =null;
    try {
        out = new BufferedWriter(new FileWriter("E:\\java\\repos\\idea_repos\\DataStructures\\src\\sparsearray\\map.data",true));  //檔案寫入流
        //将數組中的元素寫入檔案,每個用tab隔開
        for(int i = 0;i<sparseArr.length;i++) {
            for (int j=0;j<sparseArr[0].length;j++) {
                out.write(sparseArr[i][j]+"\t");
            }
            out.newLine();           

// out.write("\r\n");

}
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (out!=null) {
            try {
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    System.out.println("寫入檔案成功<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");
    /**
     * 讀取map.data檔案
     */
    BufferedReader br = null;
    int readRow = 0;//記錄行數           

// String[] temp =null;//讀取的數組

//建新的稀疏數組
    int[][] sparseArr2 = new int[count+1][3];
    try {
        br = new BufferedReader(new FileReader("E:\\java\\repos\\idea_repos\\DataStructures\\src\\sparsearray\\map.data"));
        String line = null;
        //統計行數
        while ((line = br.readLine()) !=null) {
            String[] temp = line.split("\t");
            for (int j = 0;j<temp.length;j++) {
                sparseArr2[readRow][j] = Integer.parseInt(temp[j]);
            }
            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();
            }
        }
    }
    /**
     * 周遊讀取的稀疏數組
     */
    System.out.println("從磁盤讀取的稀疏數組為:");
    for (int i = 0;i<sparseArr2.length;i++) {
        System.out.printf("%d\t%d\t%d\t\n",sparseArr2[i][0],sparseArr2[i][1],sparseArr2[i][2]);
    }

    /**
     * 将稀疏數組轉為二維數組
     */
    //根據稀疏數組建立二維數組
    int[][] chessArr2 = new int[sparseArr2[0][0]][sparseArr2[0][1]];

    //為二維數組指派
    for(int i = 1; i < sparseArr2.length; i++) {
        chessArr2[sparseArr2[i][0]][sparseArr2[i][1]] = sparseArr2[i][2];
    }
    System.out.println();
    System.out.println("轉換後的新的二維數組為:");
    //輸出新的二維數組
    for (int[] row : chessArr2) {
        for (int data : row) {
            System.out.printf("%d\t",data);
        }
        System.out.println();
    }
}           

}