2016-11-04 6 views
1

무작위 1 차원 보행을 수행하는 randomWalk라는 메서드를 작성하여 도달 한 각 위치와 보행 중에 도달 한 최대 위치를보고합니다. 랜덤 워크는 위치 0에서 시작해야합니다. 각 단계에서 위치를 1만큼 증가 또는 감소시켜야합니다 (동일한 확률로). 도보가 3 또는 -3이되면 멈 춥니 다. 출력은 다음과 같아야합니다잘못된 출력 - 왜?

position = 0 
position = 1 
position = 0 
position = -1 
position = -2 
position = -1 
position = -2 
position = -3 
max position = 1 

내 코드 :

public static void randomWalk() { 
    Random rand = new Random(); 
    int position = 0; 
    int max = 0; 
    System.out.println("position = " + position); 
    while (position != 3 && position != -3) { 
     int randomNumber = rand.nextInt(2) * 2 - 1; 
     position = position - randomNumber; //why the minus? 
     max = Math.max(max , position); 
     System.out.println("position = " + position); 
    } 
    System.out.println("max position = " + max); 
} 

내가 처음에 더하기 기호 대신 마이너스 기호, 3 아웃 4 개 출력이 잘못되었습니다 (이미지 첨부)를했다. 출력 콘솔과 관련이 있거나 제 코드가 어딘가 잘못 됐습니까? With minus sign

With plus sign

+1

A +는 똑같이 잘할 것입니다 ... 난수를 사용할 때 특정 출력을 기대하는 방법이 명확하지 않습니다. 그러나 당신은 우리에게 그 결과물의 * end *를 보여주지 못했습니다 - 아마 그것은 단지 최대 위치를 확인하고있을 것입니다. –

+0

나는 당신의 질문이 꽤 완벽하다고 생각하지만, 코드에 무엇이 잘못된 것인가? 그것은 하나씩 줄어들거나 출력을 판단하여 하나씩 증가합니다. 그래서 거기에 무슨 문제가 있습니까? – SomeJavaGuy

+1

@KevinEsche 정확하게 거기에 내 문제, 그것은 + 기호와 함께 잘 작동해야하지만 여전히 출력이 잘못되었습니다. 나는 그것들이 무작위 수를 다루고 있기 때문에 출력을 어떻게 확인하는지 모른다. –

답변

0

나는 처음에 더하기 기호 대신 마이너스 기호, 3 아웃 4 개 출력 (이미지 첨부) 잘못되었습니다했다. 출력 콘솔과 관련이 있거나 제 코드가 어딘가 잘못 됐습니까?

그것은 우리가 알고있는 요구 사항 주어진 "잘못된"아니었다. max 변수는 도달 된 최대 값을 추적합니다. 필연적으로 양수입니다. 도달 한 가장 높은 양수는 -3 종료 조건에 도달하기 전에 1이었습니다.

구현은 더하기 또는 빼기 randomNumber에 관계없이 동일하게 작동합니다. 산책의 방향 만 뒤집어 질 것입니다. 그게 전부입니다. 시드를 사용하여 Random 인스턴스를 초기화 (예 : new Random(1)) 한 다음 더하기 및 빼기를 사용하여 실행을 시도하면 쉽게 확인할 수 있습니다. 그 중 하나는 3에 도달하고 다른 하나는 -3에 도달하여 모든 단계에서 반대 방향을 취합니다.

두 번째 읽기에서 나는 당신이 어떤 종류의 판사 시스템을 통해 아마 프로그램을 실행하고있는 것을 보았습니다. 그리고 "부정확 한"것은 인쇄 된 값이이 판사가 기대하는 것과 상반되는 것을 의미합니다. 플러스 마이너스 기호를 변경하면 위에 설명한 이유 때문에 수정됩니다. 어떤 표식을 사용하든, 나는 당신의 프로그램이 부정확하다고 생각하지 않는다. 특정 기호를 사용하는 숨겨진 요구 사항은 불규칙하고 부자연 스럽습니다. 예를 들어 플러스 또는 마이너스가 랜덤 워크 원칙과 관련이없는 것입니다.