2016-11-04 46 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,在每一步都有相反的方向。

在第二读我现在明白了,你可能通过某种判断系统的运行程序,并以“不正确”,你的意思是打印的值是一个什么样的这个判断预期的对立面。正因为我上面解释过的原因,更改加号减号可以修复此问题。无论您使用哪种符号,我都认为您的程序不正确。使用特定符号的隐藏要求是不合理和不自然的,因为在随机游走原则方面,加号或减号是否无关紧要。