Java陣列之稀疏陣列
阿新 • • 發佈:2020-09-19
學習Demo
稀疏陣列
例項:五子棋遊戲。數字1表示黑棋,數字2表示白棋,數字0表示空閒點位,棋盤為 11行 * 11列
-
需求:編寫五子棋遊戲中,有存檔退出和續上盤的功能。
-
分析問題:因為該二維陣列的很多值是預設值0,因此記錄了很多沒有意義的資料【有效資料只有黑白棋】
-
解決:稀疏陣列
碼上行動
package array; /** * 稀疏陣列 * 例項:五子棋遊戲。數字1表示黑棋,數字2表示白棋,數字0表示空閒點位,棋盤為 11行 * 11列 * 1. 需求:編寫五子棋遊戲中,有存檔退出和續上盤的功能。 * 2. 分析問題:因為該二維陣列的很多值是預設值0,因此記錄了很多沒有意義的資料【有效資料只有黑白棋】 * 3. 解決:稀疏陣列*/ public class ArrayDemo6 { public static void main(String[] args) { /* 建立一個二維陣列 11 * 11(11行乘11列的棋盤) 0:沒有棋子 1:黑棋 2:白棋 */ int[][] array1 = new int[11][11]; array1[1][2] = 1; //在第二行第三列落一個黑棋 array1[2][3] = 2; //在第三行第四列落一個白棋 //輸出原始陣列 System.out.println("-------------- 原始陣列如下 ---------------"); //foreach遍歷輸出原始陣列 for (int[] ints : array1) { for (int anInt : ints) { System.out.print(anInt + "\t"); } System.out.println(); //換行 }/* 轉換為稀疏陣列儲存 1. 獲取有效值的個數 2. 建立一個稀疏陣列 3. 給稀疏陣列賦值 4. 輸出稀疏陣列 */ //計算有效值個數 System.out.println("-------------- 有效值個數如下 ---------------"); //1. 獲取有效值的個數 int sum = 0; for (int i = 0; i < 11; i++) { for (int j = 0; j < 11; j++) { if (array1[i][j] != 0) { //不為0則為有效值 sum++; } } } System.out.println("有效值的個數為:" + sum); //2. 建立一個稀疏陣列 int[][] array2 = new int[sum + 1][3]; //行:有效值的個數加1 列:固定3列 //3. 給稀疏陣列賦值 array2[0][0] = 11; array2[0][1] = 11; array2[0][2] = sum; //遍歷二維陣列,將非零的值存放在稀疏陣列中 int count = 0; for (int i = 0; i < array1.length; i++) { for (int j = 0; j < array1[i].length; j++) { if (array1[i][j] != 0) { //不為0則為有效值 count++; //計數 array2[count][0] = i; //橫座標 array2[count][1] = j; //縱座標 array2[count][2] = array1[i][j]; //有效值 } } } //4. 輸出稀疏陣列 System.out.println("-------------- 稀疏陣列如下 ---------------"); //遍歷輸出稀疏陣列 for (int i = 0; i < array2.length; i++) { System.out.println(array2[i][0] + "\t" + array2[i][1] + "\t" + array2[i][2] + "\t"); } //還原陣列 System.out.println("-------------- 還原陣列如下 ---------------"); /* 還原陣列 1. 讀取稀疏陣列 2. 給其中的元素還原它的值 3. 列印 */ //1. 讀取稀疏陣列 int[][] array3 = new int[array2[0][0]][array2[0][1]]; //2. 給其中的元素還原它的值 for (int i = 1; i < array2.length; i++) { array3[array2[i][0]][array2[i][1]] = array2[i][2]; } //3. 列印 for (int[] ints : array1) { for (int anInt : ints) { System.out.print(anInt + "\t"); } System.out.println(); } } }