将二维数组转换成稀疏数组存盘,读取并将其恢复成二维数组

    科技2022-08-12  101

    将二维数组转换成稀疏数组存盘, 读取并将其恢复成二维数组

    /** * */ package sparsearray; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.util.Arrays; /* * 总结: * * 稀疏数组只有三列,第一行第一列是原始二维数组有几行几列,几个有效值 * 第n行n列是原始二维数组有效值存放的位置 * * * 文件io处理 * * 读写操作不能再同一个try-catch代码块中执行 * * */ public class SpraseArray { public static void main(String[] args) { //创建一个二维数组 11*11 //0.表示没有棋子,1.表示黑子,2.表示白子 int[][] arr = new int[11][11]; arr[1][2] = 1; arr[2][3] = 2; //输出原始的二维数组 System.out.println("原始的二维数组~"); for(int[] row : arr){ for(int data : row){ System.out.printf("%d\t",data); } System.out.println(); } //1.先遍历二维数组 int sum = 0; for(int i = 0 ; i < 11; i++){ for(int j = 0 ; j < 11 ; j++){ if(arr[i][j] != 0){ sum++; } } } System.out.println("sum:" +sum); //2.创建稀疏数组 int sparseArr[][] = new int[sum+1][3]; sparseArr[0][0] = 11; sparseArr[0][1] = 11; sparseArr[0][2] = sum; int count = 0 ; //记录非零个数 for(int i = 0 ; i < 11; i++){ for(int j = 0 ; j < 11 ; j++){ if(arr[i][j] != 0){ count++; sparseArr[count][0] = i; sparseArr[count][1] = j; sparseArr[count][2] = arr[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(); //3.将稀疏数组存入文件 File file = new File("D:\\text"); String filename = "SparseArr.txt"; OutputStream os = null; BufferedWriter bufferedWriter = null; try { if(!file.exists()){ file.mkdirs(); } //创建文件 os = new FileOutputStream(file.getPath() + File.separator + filename); bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("D://text/SparseArr.txt"))); String write = null; for(int i = 0 ; i < sparseArr.length ; i++){ for(int j = 0 ; j < sparseArr.length; j++){ write = "" + sparseArr[i][j]+"\n"; bufferedWriter.write(write); } } } catch (IOException e) { // TODO: handle exception e.printStackTrace(); }finally{ try { bufferedWriter.flush(); bufferedWriter.close(); os.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //4.读取文件获取值,用二维数组暂存 String filepath = "D://text/sparseArr.txt"; readFile(filepath,sum); } public static void readFile(String filepath ,int sum){ File file = new File(filepath); BufferedReader bufferedReader =null; int[][]sparseArr = new int[sum+1][3]; try { if(file.exists() && file.isFile()){ file.createNewFile(); } bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(file))); String str =" "; for(int i = 0 ; i < sparseArr.length;i++){ for(int j = 0 ; j < sparseArr.length; j++){ str = bufferedReader.readLine(); sparseArr[i][j] = Integer.parseInt(str); System.out.println("arr["+i+"]["+j+"]:"+sparseArr[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(); //5.将二维数组转换成稀疏数组,再将稀疏数组转换成二维数组 int[][] arr = new int[sparseArr[0][0]][sparseArr[0][1]];//创建一个11*11的二维数组 //遍历二维数组 for(int i = 1 ; i < sparseArr.length; i++){ arr[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2]; } System.out.println(); System.out.println("转换后的二维数组~"); for(int[] row : arr){ for(int data : row){ System.out.printf("%d\t",data); } System.out.println(); } } catch (Exception e) { // TODO: handle exception e.printStackTrace(); }finally{ try { bufferedReader.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
    Processed: 0.026, SQL: 8