Java實現(xiàn)二維數(shù)組和稀疏數(shù)組之間的轉換
前言
用Java實現(xiàn)二維數(shù)據(jù)和稀疏數(shù)組之間的轉換
1. 需求和思路分析
1.1 以二維數(shù)組的格式模擬棋盤、地圖等類似的二維結構為基礎,與稀疏數(shù)組之間進行轉化。
1.2 思路分析
二維數(shù)組轉化為稀疏數(shù)組
- 遍歷原始的二維數(shù)組,得到有效數(shù)據(jù)個數(shù) sum
- 根據(jù)sum就可以創(chuàng)建稀疏數(shù)組sparseArr int[sunm+1][3]
- 將二維數(shù)組的有效數(shù)據(jù)存入到稀疏數(shù)組
稀疏數(shù)組轉為二維數(shù)組
- 先讀取稀疏數(shù)組的第一行,根據(jù)第一行的數(shù)據(jù),創(chuàng)建原始的二維數(shù)組
- 再讀取稀疏數(shù)組后幾行的數(shù)據(jù),并賦給原始的二維數(shù)組即可。
2.代碼實現(xiàn)和展示
2.1 二維數(shù)組與稀疏數(shù)組之間的轉化程序
public class SparseArr { public static void main(String[] args) { // 創(chuàng)建一個原始的二維數(shù)組 11 * 11 // 0: 沒有棋子;1:黑棋;2:白棋 int[][] chessArr = new int[11][11]; chessArr[1][2] = 1; chessArr[2][3] = 2; chessArr[2][6] = 1; // 打印輸出原始二維數(shù)組 System.out.print("原始二維數(shù)組為:\n"); for(int[] a : chessArr ){ for (int item : a ){ System.out.printf( "%d\t", item ); } System.out.println(); } //將二維數(shù)組轉換為稀疏數(shù)組思路 // 1、遍歷二維數(shù)組,統(tǒng)計有效數(shù)據(jù)的個數(shù)sum int sum = 0; for(int i=0;i < chessArr.length;i++){ for(int j=0;j < chessArr[0].length;j++){ if(chessArr[i][j] != 0){ sum++; } } } System.out.println("有效數(shù)據(jù)的個數(shù)為:" + sum); //2、建立稀疏數(shù)組,行列值 int[][] sparseArr = new int[sum+1][3]; //3、遍歷原始二維數(shù)組轉換為稀疏數(shù)組中的數(shù)據(jù) sparseArr[0][0] = 11; sparseArr[0][1] = 11; sparseArr[0][2] = sum; int count=1; for(int i=0;i < 11;i++){ for(int j=0;j < 11;j++){ if(chessArr[i][j] != 0){ sparseArr[count][0] = i; sparseArr[count][1] = j; sparseArr[count][2] = chessArr[i][j]; count++; } } } //4 輸出稀疏數(shù)組 System.out.println("稀疏數(shù)組為:"); for (int[] row : sparseArr) { // for (int data : row) { // System.out.printf( "%d\t",data); // } // System.out.println(); // } System.out.printf("%d\t%d\t%d\t\n", row[0],row[1],row[2]); } // 將稀疏數(shù)組轉化為二維數(shù)組 // 1.讀取稀疏數(shù)組首行數(shù)據(jù),建立二維數(shù)組 int[][] chessArr2 = new int[sparseArr[0][0]][sparseArr[0][1]]; // 2. 遍歷稀疏數(shù)組,賦值給二維數(shù)組 for (int i=1;i < sparseArr.length;i++) { chessArr2[sparseArr[1][0]][sparseArr[1][1]] = sparseArr[i][2]; } // 3. 打印輸出原始的二維數(shù)組 System.out.print("原始二維數(shù)組為:\n"); for (int[] row : chessArr2) { for (int data : row) { System.out.printf("%d\t", data); } System.out.println(); } } }
2.2 二維數(shù)組轉化為稀疏數(shù)組展示
原始二維數(shù)組為: 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 有效數(shù)據(jù)的個數(shù)為:3 稀疏數(shù)組為: 11 11 3 1 2 1 2 3 2 2 6 1 原始二維數(shù)組為: 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
3. 總結
用Java語言實現(xiàn)二者之間的轉化,思路很重要,按著思路寫代碼就會很省事,難的點可能是不知道如何寫代碼。
注意:printf 和 print 輸出的格式不同。
參考視頻
尚硅谷Java數(shù)據(jù)結構與java算法(Java數(shù)據(jù)結構與算法)
到此這篇關于Java實現(xiàn)二維數(shù)組和稀疏數(shù)組之間的轉換的文章就介紹到這了,更多相關Java 二維數(shù)組和稀疏數(shù)組轉換內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringBoot項目啟動過程動態(tài)修改接口請求路徑的解決方案
在SpringBoot服務整合過程中,遇到了多個服務中相同RequestMapping路徑導致的啟動問題,解決方案是通過修改RequestMappingHandlerMapping類的getMappingForMethod方法,本文給大家介紹SpringBoot修改接口請求路徑的解決方案,感興趣的朋友一起看看吧2024-09-09Mybatis利用OGNL表達式處理動態(tài)sql的方法教程
這篇文章主要給大家介紹了關于Mybatis利用OGNL表達式處理動態(tài)sql的方法教程的相關資料,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面跟著小編一起來學習學習吧。2017-06-06SpringBoot接口請求入?yún)⒑统鰠⒃鰪姷奈宸N方法
這篇文章主要介紹了SpringBoot接口請求入?yún)⒑统鰠⒃鰪姷奈宸N方法,使用`@JsonSerialize`和`@JsonDeserialize`注解,全局配置Jackson的`ObjectMapper`,使用`@ControllerAdvice`配合`@InitBinder`,自定義HttpMessageConverter和使用AOP進行切面編程,需要的朋友可以參考下2024-07-07在Java中實現(xiàn)讓線程按照自己指定的順序執(zhí)行
這篇文章主要介紹了在Java中實現(xiàn)讓線程按照自己指定的順序執(zhí)行,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06spring學習之創(chuàng)建項目 Hello Spring實例代碼
這篇文章主要介紹了spring學習之創(chuàng)建項目 Hello Spring實例代碼,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下2018-01-01