Java計算一個數的平方根(即:根號)
阿新 • • 發佈:2021-01-21
稀疏陣列
- 如果我們需要做一個圍棋遊戲,那是它的棋盤就得用二維陣列來做,當棋手需要暫停棋局是,我們就需要把棋盤原封不動的儲存起來,這個時候如果用二維陣列儲存的話,會佔用大量的資源,比如黑子為1,白子為2,沒有棋子的位置就為0,當棋盤中大部分都是空白時,我們就可以使用稀疏陣列這種資料結構來儲存以便節省資源
- 首先得有一個二維陣列(棋盤),並有一些棋子,獲取這些棋子的數量
//建立一個二維陣列,作為棋盤 int[][] arr1 = new int[11][11]; //創造兩顆棋子,1為黑子,2為白子 arr1[1][2] = 1; arr1[
2.這個時候就用稀疏陣列
- 稀疏陣列的第一行儲存二維陣列的所有行,所有列和所有值的個數(也就是棋盤的大小及棋子的數量)
- 其他行就儲存資料的位置(棋子的位置)
稀疏陣列
格式所有行 所有列 所有值的個數 行 列 值 行 列 值 … … …
//稀疏陣列
int[][] sparseArr = new int[sum+1][3];
//稀疏陣列的第一行為二維陣列的所有行,所有列,所有值
sparseArr[0][0] = arr1.length;
sparseArr[0][1] = arr1[0].length;
sparseArr[0][2] = sum;
//給稀疏陣列賦值,二維陣列中的值所在的位置
int count=0;//稀疏陣列的行數
for (int i = 0; i < arr1.length; i++) {
for (int j = 0; j < arr1[i].length; j++) {
if (arr1[i][j] != 0){
count++;//行數自增
sparseArr[count][0] = i;
sparseArr[count][1] = j;
sparseArr[count][2] = arr1[i][j];
}
}
}
System.out.println("--------稀疏陣列----------");
for (int[] row:sparseArr){
System.out.printf("%d\t%d\t%d\n",row[0],row[1],row[2]);
}
3.那棋手們回來要接著下,這個時候就需要恢復棋局,怎麼恢復呢?
- 首先,根據稀疏陣列的第一行資料創建出怎個棋盤
- 在根據座標用遍歷的方式把棋子加回去
- 注意:除去第一行資料,所以遍歷的時候索引從1開始
//稀疏陣列恢復為二維陣列
//1.根據稀疏陣列第一行資料創建出二維陣列
int[][] arr2 = new int[sparseArr[0][0]][sparseArr[0][1]];
for (int i = 1; i < sparseArr.length; i++) {
//將稀疏陣列中除了第一行之外的資料賦給二維陣列
arr2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
}
//輸出
System.out.println("--------恢復後的二維陣列---------");
for (int[] row:arr2){
for (int item:row){
System.out.printf("%d\t",item);
}
System.out.println();
}
4.搞定收工。