Web開發規範
阿新 • • 發佈:2020-10-29
技術標籤:java
稀疏陣列
概述
因為在二維陣列中,很多值是預設值0,記錄了許多沒用的資料
需求
在模擬的五子棋遊戲中,需要用到存檔、續盤功能
二維陣列->稀疏陣列
基本思路:
1.建立一個11行11列的二維陣列 0:沒有棋子 1:黑棋 2:白棋
2.獲取有效值的個數
3.建立一個稀疏陣列的陣列,遍歷二維陣列,將非零的數存入稀疏陣列中
JAVA程式碼
//1.建立一個11行11列的二維陣列 0:沒有棋子 1:黑棋 2:白棋
int[][] array1 = new int[11][11];
array1[1][2] =1;
array1[ 2][3] =2;
//輸出原始的陣列
System.out.println("輸出原始的陣列");
for (int[] ints : array1) {
for (int anInt : ints) {
System.out.print(anInt+"\t");
}
System.out.println();
}
System.out.println("=====================================" );
//轉換為稀疏陣列儲存
//獲取有效值的個數
int sum=0;
for (int i = 0; i <array1.length ; i++) {
for (int j = 0; j <array1[i].length ; j++) {
if(array1[i][j]!=0){
sum++;
}
}
}
System.out.println( "有效值個數為"+sum);
//2.建立一個稀疏陣列的陣列
int[][] array2 = new int[sum+1][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){
count++;
array2[count][0]=i;
array2[count][1]=j;
array2[count][2]=array1[i][j];
}
}
}
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"
);
結果:
稀疏陣列->二維陣列還原
基本思路:
1.讀取稀疏陣列的值
2.給其中的元素還原值
3.列印還原的陣列
JAVA程式碼
System.out.println("還原");
//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.列印還原的陣列
System.out.println("列印還原的陣列");
for (int[] ints : array3) {
for (int anInt : ints) {
System.out.print(anInt+"\t");
}
System.out.println();
}