2012-09-06 3 views
0

저는 명령 행 인수를 취하는 2 차원 랜덤 워크를 작성하고 있습니다. 랜덤 보행기가 시작점을 중심으로 2N-2N 정사각형의 경계를 치는 데 얼마나 걸리는지를 추정해야합니다. 내가 지금까지 가지고 무엇 2D 무작위 걸기, 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

네가 옳을 수도있다. im이이 문제를 충분히 경험하지 못했기 때문에 어떤 문제가 있다면 잘 모릅니다. 알고있는 사람으로부터 빠른 답변을 얻고 싶었습니다. 임 씨는 N = 1000 및 담당자 = 1000으로 인쇄하고 1528331을 얻으면서 걸어서 걸어야하는 단계를 추측합니다. – bangalo

+0

두 번째 명령 줄 인수는 무엇을 나타낼 것입니까? – Eric

답변

3

랜덤 워크가 임계 값에 도달 한 경우에만 프로그램이 종료됩니다. 그 지역 경계가 아닙니다.

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

예 :

while (x > -N && x < N && y > -N && y < N) { 
: N = 100, X = 90, Y는 ==> 90 * 90 + 90 * 90 = 16 200> 10 000

스위치를 90 =

더 좋을 것입니다. 그리고 귀하의 reps 변수가 새 것으로 사용됩니다. 한 번조차도 가치가있는 설정 옆에 있지. 그 목적이 무엇일까?

+0

+1 좋은 답변 - 질문에 대답하기 위해, 나는 그가 대리인의 수를 평균으로 생각한다고 생각합니다. 그래서 나는 그가 거기에 또 다른 고리를 놓고 있다고 생각합니다. – jeff

1

경계 조건 x*x + y*y <= N*N은 사각형이 아니라 원형을 나타냅니다. 또한 "치다"라는 말은 조건에 경계 (<)가 포함되지 않았 음을 의미합니다.

원함 Math.abs(x) < N && Math.abs(y) < N