当前位置: 首页 > 知识库问答 >
问题:

简单二维随机游动

姜淇
2023-03-14

我在这个练习中的平均距离有问题。它应该接近N步的sqrt,但它更低。你能帮我找出我的错误在哪里吗?

二维随机游动。二维随机游动模拟了一个粒子在点网格中运动的行为。在每一步中,随机步行者以1/4的概率向北、向南、向东或向西移动,与之前的移动无关。确定N步后随机步行者离起点有多远(平均)。(理论答案:按sqrt(N)的顺序)

public class RandomWalk{
    public static void main(String[] args){

    int N = Integer.parseInt(args[0]);

    double nextStep = 0;
    double averageDistance = 0;
    int COUNT = 1000;

    for (int j = 0; j < COUNT; j++){
        int moveWest = 0;
        int moveEast = 0;
        int moveSouth = 0;
        int moveNorth = 0;
        double distance = 0;

        for (int i = 0; i < N; i++){
        nextStep = Math.random()*4;
        if (nextStep <= 1) ++moveWest;
          else if (nextStep <= 2) ++moveEast;
            else if (nextStep <= 3) ++moveSouth;
              else if (nextStep <= 4)++moveNorth;       
        }

        moveEast = moveEast - moveWest;
        moveNorth = moveNorth - moveSouth;
        distance = Math.sqrt((moveEast * moveEast) + (moveNorth * moveNorth));
        averageDistance += distance; 

        System.out.println("Walker is " + distance + "\t steps away of from the starting point");
        //System.out.println("Sqrt of N is " + Math.sqrt(N));

    }
    System.out.println("Average distance is " + averageDistance/COUNT + " steps away of from the starting point");
    }
}

共有1个答案

甄伟兆
2023-03-14

我在您的代码上运行了几个测试,上面提到的范围变化为<0,1),<1,2),<2,3),<3,4),使它们相等。

你是这样做的:

if (nextStep < 1) ++moveWest;
          else if (nextStep < 2) ++moveEast;
            else if (nextStep < 3) ++moveSouth;
              else if (nextStep < 4)++moveNorth;

注意<=变成<。

Average distance is 8.873435509749317 steps away of from the starting point
W=2498906
E=2501447
N=2500022
S=2499625
 类似资料:
  • 我试着做一个Loto游戏,我必须生成一张随机的卡,在第一个collum数字从1-9,第二个10-19一直到90。这张牌的另一个规则是,每行的随机位置上只能有5个数字,这就是我遇到的麻烦。 我从这个开始在每个collum中添加数字: 然后在数组的每一行的一个数字位置上放5个数字我试过这样做: 第三个也一样。 输出: 0 18 0 0 46 0 61 72 88 0 18 0 31 0 55 0 0

  • 到目前为止,这就是我得到的,但我不太确定接下来该怎么办。我(认为)这里发生的是,它到达数组的第一个位置,在0,0处,并生成一个数字。然后转到1,1和2,2,依此类推。我不确定该从那里开始,我相信有一种更有效的方法可以一次填充整行或整列。 此外,我的编译器不允许我像平时一样使用cout或endl?它坚持我使用std::cout,我只是想知道为什么。

  • 我很难把我的心思放在这件事上。每当玩家猜错时,它应该从最初的余额中减去他/她的赌注。由于它是在一个循环中,它总是从一开始就取初始平衡,每次都吐出相同的平衡。(很明显)我试过分配不同的变量,但似乎无法找到答案。 我已经省略了中等难度和难难度的方法,因为它们现在是没有用的,直到我弄清楚这个。

  • 问题内容: 我一直在谷歌上寻找答案,但似乎找不到一个万无一失的东西,而且真的负担不起将其弄乱(进入生产站点)。 我所拥有的是具有20多个过滤器的高级搜索,它返回一个包含ID和Distance的数组。我需要做的是将这些结果混洗以每次随机显示。目前我得到的数组是: 我需要做的是每次都对它们进行随机化或排序,但要保持id和距离对,即: 谢谢 :) 问题答案: 在第一个用户后下的文件: 在保留键,值对的同

  • 我的程序应该要求用户猜测 0 到 100 之间的数字,但我似乎无法正确输出。目前,如果用户数大于随机数,它会打印出无限数量的“您的数字太高”。此外,如果第一个 UserGuess 很低,那么以下所有数字都将具有相同的提示:(“您的数字太低”),尽管它们实际上大于随机数。我不知道我做错了什么。任何帮助将不胜感激。谢谢!

  • 本文向大家介绍php简单生成随机颜色的方法,包括了php简单生成随机颜色的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php简单生成随机颜色的方法。分享给大家供大家参考,具体如下: 运行结果如下: 关于颜色值转换与获取还可参考本站在线工具: RGB颜色编码生成器 在线网页配色工具 RGB颜色查询对照表_颜色代码表_颜色的英文名称大全 更多关于PHP相关内容感兴趣的读者可查看本站专题