使用代碼模擬棋盤(二維數組)
java
public static void main(String[] args) { //棋盤上 0 表示 沒有棋子 ,1 表示黑子 2 表示紅子 //建立一個原始的二維數組,看成棋盤 int chessArr1[][] = new int[11][11]; //給棋盤上一些值 chessArr1[1][2] = 1; chessArr1[2][3] = 2; //打印棋盤 //便利數組每一行的值賦給 row System.out.println("原始的二維數組"); for(int[] row : chessArr1) { //便利 row 的值 賦值給 data for(int data : row) { //格式化打印棋盤上的數據 System.out.printf("%d\t",data); } //換行 System.out.println(); } }
執行結果
數組
將二維數組轉換爲稀疏數組
bash
public static void main(String[] args) { //將二維數組轉換爲稀疏數組 //1. 遍歷 二維數組 獲得非0 數據的個數 //非0 個數 int sum = 0; //遍歷二維數組的行數 for (int i = 0; i < chessArr1.length; i++) { //遍歷二維數組的列數 for (int j = 0; j < chessArr1.length; j++) { //值不爲0 將他的個數記錄下來 if(chessArr1[i][j] !=0 ) { sum ++ ; } } } System.out.println("sum = "+sum); //建立稀疏數組 //稀疏數組 的 行爲有效數據中個數+1 固定時3 列 int sparseArr[][] = new int[sum+1][3]; //稀疏數組 第一行第一列的數據 sparseArr[0][0] = chessArr1.length; //稀疏數組 第一行第2列的數據 sparseArr[0][1] = chessArr1.length; //稀疏數組 第一行第3列的數據 sparseArr[0][2] = sum; //遍歷二維數組將 非0 數據放入稀疏數組 //計數器 ,用來計算 當前數第幾行 int count = 0 ; for (int i = 0; i < chessArr1.length; i++) { for (int j = 0; j < chessArr1.length; j++) { //當二維數組中數據不爲0 時 放到稀疏數組中 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 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("");
執行結果
spa
其中由於稀疏數組的列是固定的3 列 ,並且 第一行第一例的數據是二維數組的總行數,第一行第二列的數據是 二維數組的總列數,第一行 第三列的數據是二維數組中有效數據(不爲0)的總個數 從第二行起 沒第一列表明該有效數據的行數,第二列代碼該有效數據的列數,第三列表明該有效數據的具體的值 由此咱們能夠建立並給稀疏數組賦值
將稀疏數組轉換爲二維數組
code
public static void main(String[] args) { //將稀疏數組 轉爲 二維數組 //1. 稀疏數組的第一行 第一列和第二列 存放的是 二維數組的行列 int chessArr2[][] = new int[sparseArr[0][0]][sparseArr[0][1]]; //2. 從第二行開始將 稀疏數組中的數據賦值給 二維數組 由於都是有效數據 ,不用判斷爲0 for (int i = 1; i < sparseArr.length; i++) { chessArr2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2]; } System.out.println("恢復後的二維數組"); for(int[] row : chessArr2) { //便利 row 的值 賦值給 data for(int data : row) { //格式化打印棋盤上的數據 System.out.printf("%d\t",data); } //換行 System.out.println(); } }
在轉換回去時咱們從稀疏數組的第一行第一列,第一行第二列 獲取須要建立的二維數組的大小 而後從第二行開始 循環的將 第一列,第二列的 值(稀疏數組的第三列)賦值給二維數組便可
執行結果
blog