我正在学习Android开发并尝试制作一个简单的Monty Hall问题游戏。
基本上你有三扇门可供选择,一扇门后面有一辆车,而其他两扇门后面都有一只山羊。
我做了一个带有条件的while循环,以确保三个随机数不会全部为0(表示山羊)或者不会超过变量且值为1(car)。
但是当我运行该程序并进入此活动时,它将被卡在黑屏中而没有错误 好像它处于一个无限循环中。
do while循环中的逻辑是否正确?
public class Game extends Activity{
ImageView image1, image2, image3;
int[] images={R.drawable.gaot1, R.drawable.eleanormustang};
Random r = new Random();
int i1 = 0;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.gameactivity);
picClicked();
}
public void picClicked() {
do {
i1 = r.nextInt(2 - 0) + 0;
i2 = r.nextInt(2 - 0) + 0;
i3 = r.nextInt(2 - 0) + 0;
} while ((i1 & i2 &i3) ==0 || ( (i1 & i2) & (i1 & i3) & (i2 & i3) ) ==1 );
image1 = (ImageView) findViewById(R.id.ImageView1);
image2 = (ImageView) findViewById(R.id.ImageView2);
image3 = (ImageView) findViewById(R.id.ImageView3);
image1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//image1.setImageResource(R.drawable.gaot1);
image1.setImageResource(images[i1]);
}
});
image2.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
image2.setImageResource(images[i2]);
}
});
image3.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
image3.setImageResource(images[i3]);
}
});
}
}
答案 0 :(得分:3)
您根本不想生成三个随机数。以这种方式思考:你想要一个随机数字来指示奖品落后于哪个门,然后你使用该随机数生成i1
,i2
,i3
。
所以
int door = r.nextInt(3);
i1 = (door==0 ? 1 : 0);
i2 = (door==1 ? 1 : 0);
i3 = (door==2 ? 1 : 0);
无需任何循环即可完成。
答案 1 :(得分:0)
当chiastic-security回答时,你的方法很糟糕。但是,它会起作用,除了你也犯了一个逻辑错误。你的while条件检查i1,i2和i3的按位AND是0还是1.总是在数字为0或1时。相反,如果总和不是1,你可能会重复循环。
do{
...
} while ( i1 + i2 + i3 != 1 ); // so only (1,0,0), (0,1,0), or (0,0,1) passes