2016-11-04 45 views
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

雖然我認爲你的問題是相當完整的,我不明白代碼有什麼問題?它通過判斷輸出減少1或者增加1,所以最近有什麼錯誤? – SomeJavaGuy

+1

@KevinEsche準確地說,我的問題在那裏,它應該與+符號很好,但仍然輸出是錯誤的。我不知道他們如何檢查輸出,因爲它處理隨機數。 –

回答

0

我最初有加號,而不是減號,和3超過4個輸出是不正確的(圖像附後)。這與輸出控制檯有關嗎?還是我的代碼在某處錯了?

這是 「不正確」,因爲我們知道要求。 max變量跟蹤達到的最大值。這不可避免地是一個正數。在達到-3退出條件之前達到的最高正數爲1。

無論加號或減號randomNumber,您的實施工作同樣有效。只是散步的方向將被翻轉,就這樣。通過使用種子初始化Random實例,例如new Random(1),可以輕鬆觀察到這一點,然後嘗試使用加號和減號運行。其中一個將達到3,另一個-3,在每一步都有相反的方向。

在第二讀我現在明白了,你可能通過某種判斷系統的運行程序,並以「不正確」,你的意思是打印的值是一個什麼樣的這個判斷預期的對立面。正因爲我上面解釋過的原因,更改加號減號可以修復此問題。無論您使用哪種符號,我都認爲您的程序不正確。使用特定符號的隱藏要求是不合理和不自然的,因爲在隨機遊走原則方面,加號或減號是否無關緊要。