2012-09-06 146 views
0

我在寫一個採用命令行參數的二維隨機遊走。它應該估計隨機步行者需要多長時間才能達到以起始點爲中心的2N乘2N平方的邊界。二維隨機遊走,Java

我走到這一步是:

public class RandomWalk 
{ 
    public static void main(String[] args) 
    { 
     int N = Integer.parseInt(args[0]); 
     int reps = Integer.parseInt(args[1]); 
     int x = 0;  
     int y = 0;  
     double r; 
     int steps = 0; 

     while (x*x + y*y <= N*N) { 
      steps++; 
      r = Math.random(); 

      if  (r <= 0.25) x++; 
      else if (r <= 0.50) x--; 
      else if (r <= 0.75) y++; 
      else if (r <= 1.00) y--; 
     } 

     System.out.println(steps); 
    } 

} 

只是想檢查,如果你們想我做錯了。

+2

你有問題嗎?這可能更適合[代碼審查](http://codereview.stackexchange.com/)。 –

+0

是的,你可能是對的。不知道我是否有任何問題,因爲我幾乎沒有足夠的經驗足夠知道這一點。只是想從可能知道的人那裏得到一個快速回答。林要求打印它與N = 1000和代表= 1000,即時得到1528331這將猜測步行者必須採取的步驟。 – bangalo

+0

第二個命令行參數應該表示什麼? – Eric

回答

3

只有當隨機遊走達到閾值時,程序纔會終止。不是該地區的邊界。

while (x*x + y*y <= N*N) { 

一個例子:N = 100,X = 90,Y = 90 ==> 90 * 90 + 90 * 90 = 16 200> 10 000

它切換到:

while (x > -N && x < N && y > -N && y < N) { 

這樣會更好。而你的reps變量更新使用。即使不是一次,除了設置它的價值。那應該是什麼目的呢?

+0

+1尼斯答案 - 回答你的問題,我認爲他應該考慮代表人數 - 所以我認爲他錯過了另一個循環。 – jeff

1

你的邊界條件,x*x + y*y <= N*N描述了一個圓,而不是一個正方形。此外,措詞「命中」意味着條件不包括邊界(<)。

你想要Math.abs(x) < N && Math.abs(y) < N