2011-07-29 83 views
1

我正在使用Java創建一個戰列艦遊戲,我無法隨機生成2個隨機數字,這些隨機數字會在戰艦板上選擇一個地方。例如,電腦必須在電路板上隨機選擇一個空間放置船隻(以後再拍攝)。在二維數組中生成隨機數

我創建了一個二維數組:

int rows = 10; 
int cols = 10; 
char [][] grid; 
grid = new char[rows][cols]; 

,然後試圖幾種不同的方式來獲取數組中的兩個隨機數,但我無法得到它的工作。下面是我所嘗試過的例子:

int randomPos = (char) (Math.random() * (grid[rows][cols] + 1)); 

請問我一些問題,如果這沒有意義。

肖恩

+0

這是AI猜測位置投擲炸彈嗎?如果是這樣,你不需要重複的位置,所以最好將所有可能的位置放在一個列表中,然後使用'java.util.Collections.shuffle(List)'它們。 –

+0

@Steve Taylor是的,但我認爲我必須做同樣的事情來爲電腦選擇隨機職位來放置他們的船。那會做什麼? – Sean

+0

混洗只是按隨機順序重新排列列表中的項目。在船上放置船是完全不同的事情。在這種情況下,最簡單的方法就是蠻力 - 只要不斷嘗試隨機的位置和方向,直到船舶適合,重複相同的要放置的所有船隻。 –

回答

1

Math.random()產生十進制數。沒有任何意義的是有方形3.5779789689689...(或你所指的任何東西),所以使用Math.floor()方法,它將內部的數字四捨五入到最接近的整數。正如@Sanjay解釋,分別生成數字...

int row = (int) Math.floor(Math.random() * rows); 
int col = (int) Math.floor(Math.random() * cols); 

現在你有實際的整數,你可以使用。

+0

這是不是2D數組?如果不是,我將如何獲得二維數組中的隨機數字? – Sean

+0

是的,但是如果您需要該數組作爲別的東西,請不要刪除它。 – fireshadow52

+0

好的,謝謝! – Sean

0

分別生成兩個隨機數並用它們來索引你的主板。爲了詳細說明:

x = random(max_rows) 
y = random(max_cols) 
(x, y) -> random location (only if it's not already marked) 

在你的情況下,隨機數的範圍應該在0到9之間(含兩個)。

0
int randomRow = Math.random() * grid.length; 
int randomColumn = Math.random() * grid[0].length; 

我不會用字符作爲我網格類型,但代碼中的數組中的上述工作都是一樣的類型無關的。

+0

我不得不使用字符,所以我可以把一個破折號放在董事會。感謝您的回答。 – Sean

0

嘗試此聲明,這是一實例變量:

Random random = new Random(); 

//In the method do this: 

int randomPos = generator.nextInt(11); //This generates a number between 0 and 10.