日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

二维数组转稀疏数组,写入文件后再读取文件,将内容转回二维数组

發布時間:2025/3/20 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二维数组转稀疏数组,写入文件后再读取文件,将内容转回二维数组 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

該方法模擬的是將棋盤的位置保存到稀疏數組中,降低存儲的數據量,通過寫入磁盤做持久化,再讀入后恢復棋盤內容。

package com.moson.sparsearray;import java.io.*;/*** 數組轉稀疏數組再轉回數組* @author moxingjian* @version 1.0* @date 10/10/19 7:40 PM*/ public class SparseArray {public static void main(String[] args) {// 初始化數組int[][] cheerArray = new int[11][11];// 添加值,添加的是棋盤的位置cheerArray[1][2] = 1;cheerArray[2][3] = 2;cheerArray[3][6] = 1;cheerArray[4][4] = 2;System.out.println("原始數組~");for (int[] row : cheerArray) {for (int data : row) {System.out.printf("%d\t" , data);}System.out.println();}// 獲取非0的個數int sum = 0;for (int i = 0; i < 11; i++) {for (int j = 0; j < 11; j++) {if (cheerArray[i][j] != 0) {sum++;}}}// 初始化稀疏數組int[][] sparseArray = new int[sum+1][3];// 第一行記錄的是:行、列數和非0的個數sparseArray[0][0] = 11;sparseArray[0][1] = 11;sparseArray[0][2] = sum;// 記錄非0的行數int count = 0;// 填充稀疏矩陣剩下的行for (int i = 0; i < 11; i++) {for (int j = 0; j < 11; j++) {if (cheerArray[i][j] != 0) {count++;sparseArray[count][0] = i;sparseArray[count][1] = j;sparseArray[count][2] = cheerArray[i][j];}}}System.out.println("得到稀疏數組~");// 輸出稀疏數組/* for (int[] row : sparseArray) {for (int data : row) {System.out.printf("%d\t", data);}System.out.println();}*/for (int i = 0; i < sparseArray.length; i++) {System.out.printf("%d\t%d\t%d\t\n", sparseArray[i][0], sparseArray[i][1], sparseArray[i][2]);}String pathname = "/Users/moxingjian/IdeaProjects/DataStructures/src/main/java/com/moson/sparsearray/saprseArray.txt";// 輸出到文件中File file = new File(pathname);FileOutputStream fileOutputStream = null;if (!file.exists()) {try {//創建文件file.createNewFile();} catch (IOException e) {e.printStackTrace();}}try {fileOutputStream = new FileOutputStream(file, true);for (int i = 0; i < sparseArray.length; i++) {StringBuffer stringBuffer = new StringBuffer();stringBuffer.append( sparseArray[i][0] + "\t" + sparseArray[i][1] + "\t" + sparseArray[i][2] + "\n");System.out.println(stringBuffer);fileOutputStream.write(stringBuffer.toString().getBytes("utf-8"));}} catch (FileNotFoundException e) {e.printStackTrace();} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {try {fileOutputStream.close();} catch (IOException e) {e.printStackTrace();}}System.out.println("從文件中讀取稀疏數組~");// 從文件中讀取稀疏數組File sparseArrayData = new File(pathname);int[][] sourceCheerArray = null;if (file.exists()) {FileReader fileReader = null;BufferedReader bufferedReader = null;try {fileReader = new FileReader(sparseArrayData);bufferedReader = new BufferedReader(fileReader);String line = null;int countSparse = 0;int number = 0;while ((line = bufferedReader.readLine()) != null) {System.out.println(line);// 將每一行轉為數組String[] split = line.split("\t");Integer row = Integer.valueOf(split[0]);Integer col = Integer.valueOf(split[1]);Integer value = Integer.valueOf(split[2]);if (countSparse == 0) {sourceCheerArray = new int[row][col];} else {number++;sourceCheerArray[row][col] = value;}countSparse++;}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {try {bufferedReader.close();fileReader.close();} catch (IOException e) {e.printStackTrace();}}}// 將稀疏數組轉回二維數組/* int[][] sourceCheerArray = new int[sparseArray[0][0]][sparseArray[0][1]];// 將稀疏數組中記錄的值填充回二維數組for (int i = 1; i < sparseArray.length; i++) {sourceCheerArray[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2];}*/System.out.println("得到原始二維數組~");// 輸出源二維數組for (int[] row : sourceCheerArray) {for (int data : row) {System.out.printf("%d\t", data);}System.out.println();}} }

總結

以上是生活随笔為你收集整理的二维数组转稀疏数组,写入文件后再读取文件,将内容转回二维数组的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。