簡體   English   中英

生成兩個相同的隨機數,另一個不同

[英]Generating two identical random numbers and one that is different

我正在學習android開發,並試圖制作一個簡單的Monty Hall問題游戲。

基本上,您可以選擇三扇門,其中一扇門后面有一輛汽車,而其他兩扇門后面都有一只山羊。

我做了一個條件為do的循環,以確保三個隨機數不會全部為0(意味着山羊),或者不會有大於on的值1(汽車)。

但是,當我運行該程序並轉到此活動時,它將陷入黑屏,並且沒有錯誤,就好像它處於無限循環中一樣。

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);

不需要任何循環就可以做到。

正如安全性所回答的那樣,您的方法很糟糕。 但是,它會起作用,除非您也犯了邏輯錯誤。 您的while條件檢查i1,i2和i3的按位與是0還是1。數字始終為0或1時總是如此。相反,如果總和不為1,則可能重復循環。

do{
    ... 
} while ( i1 + i2 + i3 != 1 ); // so only (1,0,0), (0,1,0), or (0,0,1) passes

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM