gpt4 book ai didi

java随机.奇怪的行为

转载 作者:行者123 更新时间:2023-12-01 23:59:26 25 4
gpt4 key购买 nike

游戏:
有一个盒子,分为五个部分。盒子里坐着老鼠。猫坐在盒子附近。
每次转动,猫都会将爪子放在该部分上。
1) 如果猫将爪子放在鼠标所在的部分上,游戏就结束
2)else,否则,鼠标移动到相邻的部分,包括猫爪子下面的部分
我正在尝试找到一只能够以最少的步数(平均)获胜的策略猫。
链 - 循环重复猫的一系列 Action 。
以下函数返回给定链的平均获胜步数:

public static double computePerformanceForChain(String chain)
{
final int iterationsCount = 10000;
int catPos, mousePos,steps=0;
Random random = new Random(System.currentTimeMillis());
for(int i=0; i<iterationsCount; i++)
{
mousePos=random.nextInt(5);
for(int j=0;;j++)
{
catPos=Integer.parseInt(String.valueOf(chain.charAt(j%chain.length())));
steps++;
if(catPos==mousePos) break;
if(mousePos==0) mousePos=1;
else if(mousePos==4) mousePos=3;
else mousePos+=random.nextInt(2)*2-1;
}
}
return (double)steps/iterationsCount;
}

例如,computePerformanceForChain("1133") 返回大约 3。
但对于链“23”函数循环。
为什么会发生这种情况?谢谢。

最佳答案

简单答案:不能保证执行会脱离内循环
检查内循环:

    for(int j=0;;j++) {
catPos=Integer.parseInt(String.valueOf(chain.charAt(j%chain.length())));
steps++;
if(catPos==mousePos) break;
if(mousePos==0) mousePos=1;
else if(mousePos==4) mousePos=3;
else mousePos+=random.nextInt(2)*2-1;
}

因此,每次迭代时,mousePos 的奇偶校验都会发生变化。所以如果:

  • mousePos 最初分配给奇数
  • chain 是奇偶序列,例如“23”

那么 catPos 将永远不会等于 mousePos 并且循环永远不会结束。

简单地说:如果鼠标最初位于奇数部分(例如第 3 部分),那么猫无法用 2-3 链捕获它,并且将无限重复此序列。

关于java随机.奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15105798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com