目前只有一个功能,当我点击一只山羊,它在随机位置创建另一只山羊.
我意识到有一种职位模式:
这是代码:
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 = 120; cabra.setLayoutParams(params); cabra.setonClickListener(new OnClickListener() { @OverrIDe public voID onClick(VIEw v) { criarCabra(new Random().nextInt(2000),new Random().nextInt(1000)); } }); battlefIEld.addVIEw(cabra); }}
我想知道为什么这个模式是创建的,尽管我使用Random().NextInt()来定义山羊的位置.
我疯了吗?
解决方法 首先,您每次都要创建一个新的Random对象.在AndroID中,initial seed is derived from current time and the identity hash code:public Random() { // Note: Using IDentityHashCode() to be hermetic wrt subclasses. setSeed(System.currentTimeMillis() + System.IDentityHashCode(this));}
对于按顺序创建的两个对象,身份哈希码彼此靠近.在我的AndroID KitKat Dalvik VM上,我得到的差异仅为32的身份哈希码.
currentTimeMillis()也不会给种子带来很大的不同.
随机本身就是linear congruential generator的形式
random[i+1] = a * random[i] + b (mod c)
其中random [0]是种子,a,b和c是参数.
基于this answer,类似的种子确实在线性同余发生器中产生类似的结果:
The reason you’re seeing similar initial output from nextDouble given similar seeds is that,because the computation of the next integer only involves a multiplication and addition,the magnitude of the next integer is not much affected by differences in the lower bits.
因此,您的两个连续生成的具有默认种子的随机数将产生似乎相关的值,并使您的山羊定位在一条线上.
要修复它,使用与线性一致的相同的Random对象和/或更随机的伪随机生成器.
总结以上是内存溢出为你收集整理的android – 在Random()方法中有没有一些模式?全部内容,希望文章能够帮你解决android – 在Random()方法中有没有一些模式?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)