我正在学习android开发,并尝试制作一个简单的Monty Hall问题游戏。
基本上你有三扇门可供选择,其中一扇门后面有一辆车,而另外两扇门后面都有一只山羊。
我用一个条件做了一个do while循环,以确保这三个随机数不都是0(意思是goat),或者不会有大于on的值为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]);
            }
        });
    }

}

最佳答案

你根本不想产生三个随机数这样想:你需要一个随机数来指示奖品在哪个门后面,然后用这个随机数生成i1i2i3
所以

int door = r.nextInt(3);
i1 = (door==0 ? 1 : 0);
i2 = (door==1 ? 1 : 0);
i3 = (door==2 ? 1 : 0);

不需要任何循环就可以完成。

10-05 23:06
查看更多