我开始制作一个有山羊的项目!是的山羊.目前只有一个功能,当我点击山羊时,它会在随机位置创建另一只山羊.我意识到有一种立场模式:

这是代码:
public class GameActivity extends Activity {
private int[] arrGoats = new int[5];
private RelativeLayout battlefield;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_game);
battlefield = (RelativeLayout) findViewById(R.id.rel_battlefield);
arrGoats[0] = R.drawable.amarelo;
arrGoats[1] = R.drawable.azul;
arrGoats[2] = R.drawable.branco;
arrGoats[3] = R.drawable.verde;
arrGoats[4] = R.drawable.vermelho;
criarCabra(60, 100);
}
private void criarCabra(float x, float y) {
int cabraImg = arrGoats[new Random().nextInt(4)];
ImageView cabra = new ImageView(this);
cabra.setImageResource(cabraImg);
cabra.setX(x);
cabra.setY(y);
LayoutParams params = (LayoutParams) new LayoutParams(MarginLayoutParams.WRAP_CONTENT,
MarginLayoutParams.WRAP_CONTENT);
params.width = 150;
params.height …Run Code Online (Sandbox Code Playgroud) 我已经将我遇到的一个错误简化为以下几行代码:
int[] vals = new int[8];
for (int i = 0; i < 1500; i++)
vals[new Random(i).nextInt(8)]++;
System.out.println(Arrays.toString(vals));
Run Code Online (Sandbox Code Playgroud)
输出为:[0,0,0,0,0,1310,190,0]
这只是选择连续数字来种子随机然后使用功率为2的nextInt的工件吗?如果是这样,我是否应该注意到这样的其他陷阱,如果没有,我做错了什么?(我不是在寻找上述问题的解决方案,只是对其他可能出错的一些理解)
丹,写得很好的分析.由于javadoc非常清楚如何计算数字,所以为什么会发生这种情况并不是一个谜,就像还有其他类似的异常需要注意 - 我没有看到任何关于连续种子的文档,而我我希望有一些java.util.Random经验的人可以指出其他常见的陷阱.
至于代码,需要几个并行代理具有可重复的随机行为,这些行为恰好从枚举8个元素中选择,只要它们的第一步.一旦我发现了这种行为,种子都来自一个从已知种子创建的主随机对象.在程序的前一个(顺序播种)版本中,所有行为在第一次调用nextInt后迅速分散,因此我花了很长时间才将程序的行为缩小到RNG库,我想避免未来的情况.