所以,我想要做的是在特定次數的隨機位置用零填充二維陣列。假設它必須是 90 個位置的陣列中的 20 個零。到目前為止我所做的是宣告一個二維陣列并用亂數填充它。我的下一個想法是簡單地選擇隨機位置并用零替換它們。知道我怎么做嗎?
int[][] myboard = new int[9][9];
for (int i = 0; i < myboard.length; i ) {
for (int j = 0; j < myboard[i].length; j ) {
myboard[i][j] = (int) (Math.random() * 10);
}
}
uj5u.com熱心網友回復:
偽代碼如下所示:
while (num_zeros_filled < 20):
row = random()%total_rows
col = random()%total_cols
if (arr[row][col] == 0): # already filled in with 0
continue
else:
arr[row][col] = 0
num_zeros_filled = 1
然而,如果只生成那些已經填充為 0 的單元格,理論上這可能需要無限時間。 更好的方法是將二維陣列映射到一維陣列,然后僅從這些單元格中采樣尚未填充0。
uj5u.com熱心網友回復:
這是實作目標的一種相當簡單的方法,但它應該可以完成作業。所以你需要得到每一行的長度。完成后,您可以呼叫一個函式,該函式將為您提供某個起點和行長度之間的亂數。這是一些代碼示例,向您展示我的意思:
import java.util.concurrent.ThreadLocalRandom;
import java.util.Arrays;
public class Example {
public static void main(String []args) {
int[][] myboard = new int[9][9];
for (int i = 0; i < myboard.length; i ) {
for (int j = 0; j < myboard[i].length; j ) {
// fill the row with random vals
myboard[i][j] = GetRandomNumber(0, myboard[i].length);
}
// sneak as much zeros as your heart content
int random = GetRandomNumber(0, myboard[i].length);
myboard[i][random] = 0;
}
System.out.println(Arrays.deepToString(myboard));
}
private static int GetRandomNumber(int min, int max) {
/*
min is the start point
max is the curr row len
*/
return ThreadLocalRandom.current().nextInt(min, max);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/339104.html
上一篇:如何根據Vuejs中的陣列唯一ID在選擇選項中顯示資料
下一篇:JS回傳結構
