随机漫步Java

时间:2012-02-07 02:26:06

标签: java

随机游走是随机过程,其中粒子在结构化空间中一次一步地从一个状态移动到另一个状态。对我们来说,状态空间将是Z,即整数集。粒子以初始状态S [0]∈Z开始。如果在i≥0步后,粒子处于状态S [i],则在步骤i + 1中,粒子移动到状态S [i] + 1概率p和状态S [i] - 1的概率为q;它不能停滞不前。当然,p + q = 1.如果S [0] = 5且0 <0。 p&lt; 1,然后序列5,4,3,4,3,2,3,2,3,4是粒子移动9次的可能状态序列。

编写一个程序,该程序将模拟给定步数的随机游走,并计算随机游走的某些统计数据。模拟参数来自标准输入作为单行参数,包括(1)初始状态S [0]; (2)p的值; (3)模拟的步骤数。

注意:我是用Java编写的。 到目前为止,我有:

public static void main(String[] args) {

    Random rand = new Random();
    int iState = rand.nextInt();
    int particle = iState;
    double pValue = 0.60;
    int numSteps = rand.nextInt() + 1;
    int nSteps = 0;

    if (numSteps>=0) {
        System.out.println(particle);
        while (nSteps<numSteps); {

            if (rand.nextDouble() < pValue)
                particle++;

            else
                particle--;

            System.out.println(particle);
            nSteps++;

        }

    }

但是有些东西似乎出了问题,所以我被卡住了。

编辑:谢谢你们,不知怎的,我没有抓到那个分号。

// --------------------------------------------- -------------------------------------------

编辑2:好的,所以我让代码正常工作;但是,最后我应该列出最大值,最小值和平均值。这可能不为每个iState值创建一个新变量吗?我的新代码是

 public static void main(String[] args) {

    Random rand = new Random();
    int iState = rand.nextInt();
    double pValue = 0.60;
    int numSteps = rand.nextInt(100) + 1;
    int nSteps = 0;

    if (numSteps>=0) {
        System.out.println(iState);
        while (nSteps<numSteps) {

            if (rand.nextDouble() < pValue)
                iState++;

            else
                iState--;

            System.out.println(iState);
            nSteps++;

4 个答案:

答案 0 :(得分:6)

认为你的问题是你需要删除行中的分号

while (nSteps<numSteps); {

此外,您几乎肯定不想迭代rand.nextInt() + 1步骤,因为rand.nextInt()可能是否定的。您可能意味着rand.nextInt(n)其中n是某个上限,或者您可能只是将其设置为n

更新:如果您需要跟踪最小值,最大值和平均值,您可能会执行类似

的操作
 int min = iState; // initial value
 int max = iState; // initial value
 long total = iState; // initial value

然后,在每次迭代后,你说

 min = Math.min(min, iState);
 max = Math.max(max, iState);
 total += iState;

然后在迭代结束时,您的最小值位于min,最大值位于max,平均值为(double) total / numSteps

答案 1 :(得分:1)

在声明while循环的条件后,您有一个分号。只需删除它就可以了。

    while (nSteps<numSteps);

答案 2 :(得分:1)

注意你的分号!

while (nSteps<numSteps); {应为while (nSteps<numSteps) {

答案 3 :(得分:0)

实施bernoulli函数以确定给定p和q移动的状态。例如)因为p = 0.6 =。 Q = 0.4。使用10个球,6个红色,4个蓝色并挑选球,看看它是什么颜色。如果是红色,则转到状态+ 1,如果是蓝色,则转到状态-1。

因此,您可以生成1-10的随机数,其中1-6代表红色,7-10代表蓝色。使用rand.nextInt(10)+1表示1到10。

此外,如果您不打算在其他地方使用它(istate和particle),则不必使用2个变量来表示相同的事物。