生成两个相同的随机数和一个不同的随机数

时间:2014-09-26 20:58:43

标签: java android algorithm random

我正在学习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]);
            }
        });
    }

}

2 个答案:

答案 0 :(得分:3)

您根本不想生成三个随机数。以这种方式思考:你想要一个随机数字来指示奖品落后于哪个门,然后你使用该随机数生成i1i2i3

所以

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