RandomWalkers随机游走程序排查:均方距离输出与预期不符
RandomWalkers程序错误排查
错误1:参数获取方式不符合要求
原代码使用Scanner从标准输入读取参数,但题目要求是接收命令行传入的两个整数参数,对应运行示例中java RandomWalkers N T的传参方式,需要从main方法的args数组中解析参数。
错误2:随机方向取值范围错误
Math.random()返回的是[0, 1)区间的随机浮点数,原代码乘以3后得到的范围是[0, 3),强转int后只能得到0、1、2三个值,导致case 3(x减1的方向)永远不会被触发,四个方向的游走概率不均等,结果必然偏离预期。正确应该乘以4,得到[0,4)的范围,强转后刚好覆盖0、1、2、3四个方向值。
修正后的代码
public class RandomWalkers{ public static void main(String[] args) { // 从命令行参数解析N和T int N = Integer.parseInt(args[0]); int T = Integer.parseInt(args[1]); double totalSquaredDist = 0; for(int i=0;i<T;i++){ int x = 0, y = 0; for(int j=0;j<N;j++){ // 生成0-3的随机整数,对应四个方向 int direction = (int)(Math.random() * 4); switch(direction){ case 0: y++; break; case 1: x++; break; case 2: y--; break; case 3: x--; break; } } totalSquaredDist += x*x + y*y; } System.out.println("mean squared distance = "+ totalSquaredDist/T); } }
均方距离结论
大量试验验证可得,二维简单对称随机游走的均方距离和步数N呈线性关系,均方距离 ≈ N,和参考运行示例的结果一致。
内容的提问来源于stack exchange,提问作者Alikhan Aimagambet
相关产品推荐
相关产品推荐

