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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【数据结构】稀疏数组

發布時間:2024/1/8 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【数据结构】稀疏数组 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

稀疏數組保存五子棋棋盤

思路:二維數組模擬棋盤 --->稀疏數組--->序列化到文件中保存--->反序列化得到稀疏數組--->還原二維數組

??對象序列化需要實現Serializable接口。要是是我們定義的對象那好辦,直接在類的后面加一句implements Serializable就可以了。思路是定義一個類,然后定義一個二維數組的屬性,然后操作這個類。
??但是,在一開始我正愁沒有類讓我去實現接口,于是我嘗試著直接去序列化了數組,操作居然成功了,這就很神奇,至于為什么暫時不清楚。總之需求已經完成了。看代碼:

import java.io.*; import java.util.Arrays;/*** 稀疏數組保存五子棋棋盤* 思路:二維數組 --->稀疏數組--->還原二維數組*/ public class SparseArray {public static void main(String[] args) {// 定義一個11*11 的五子棋棋盤int chessArr1[][] = new int[11][11];//初始化二維數組,賦幾個值。相當于這時下了幾步棋,保存棋局,下次再繼續下。chessArr1[1][2] = 1;chessArr1[2][2] = 2;chessArr1[3][2] = 1;//遍歷打印二維數組看下效果,降維。每個一維數組的元素就是一個一維數組for (int[] rows : chessArr1) {//把當前元素(是一個一維數組)遍歷打印for (int row : rows) {System.out.printf("%d\t",row);}//換一行System.out.println();}//轉稀疏數組,先定義一個稀疏數組//3列,行數為:有效數據 + 1int sum = 0;for (int i = 0; i < chessArr1.length; i++) {for (int j = 0; j < chessArr1.length; j++) {if (chessArr1[i][j] != 0){sum++;}}}//System.out.println(sum);int [][] sparseArr = new int[sum + 1][3];//初始化該稀疏數組sparseArr[0][0] = chessArr1.length;sparseArr[0][1] = chessArr1.length;sparseArr[0][2] = sum;int count = 0;for (int i = 0; i < chessArr1.length; i++) {for (int j = 0; j < chessArr1.length; j++) {if (chessArr1[i][j] != 0){count++;sparseArr[count][0] = i;sparseArr[count][1] = j;sparseArr[count][2] = chessArr1[i][j];}}}//把稀疏數組打印出來康康System.out.println("得到的稀疏數組:");for (int[] rows : sparseArr) {for (int row : rows) {System.out.printf("%d\t",row);}System.out.println();}//序列化,保存文件try {ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("D:\\code\\DataStructuresAndAlgorithms\\DataStructures\\src\\chess.dat"));oos.writeObject(sparseArr);oos.close();} catch (IOException e) {throw new RuntimeException(e);}//反序列化int[][] sparseArr2 = null;try {ObjectInputStream ois = new ObjectInputStream(new FileInputStream("D:\\code\\DataStructuresAndAlgorithms\\DataStructures\\src\\chess.dat"));sparseArr2 = (int[][]) ois.readObject();ois.close();System.out.println("====反序列化還原的稀疏數組=====");System.out.println(Arrays.deepToString(sparseArr2));} catch (Exception e) {throw new RuntimeException(e);}//根據稀疏數組還原二維數組int[][] chessArr2 = new int[sparseArr2[0][0]][sparseArr2[0][1]];//注意,i 從1開始,而不是從0開始。for (int i = 1; i < sparseArr2.length; i++) {//稀疏數組的列和列的含義是固定的,因此我們用一層遍歷行即可還原//列的含義:第一列,元素所在二維數組的行;第二列,元素所在二維數組的類;第三列,元素所在二維數組的值。chessArr2[sparseArr2[i][0]][sparseArr2[i][1]] = sparseArr2[i][2];}//把還原后的二位數組打印出來看看:System.out.println("恢復后的二維數組:");for (int[] rows : chessArr2) {for (int row : rows) {System.out.printf("%d\t",row);}System.out.println();}}}

運行截圖:

總結

以上是生活随笔為你收集整理的【数据结构】稀疏数组的全部內容,希望文章能夠幫你解決所遇到的問題。

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