0

それが正確なコードで、ケース 0: とケース 1: のスイッチがあります。ケース 1: が毎回出てくるようです。50/50 の確率で 0 または 1 が出てくるようにしたいと思います。正しい方法または1.5を使用する必要がありますか、またはこれはどのように機能しますか?

talka = (int)(Math.random() * 1);
        switch(talka)
        {

        case 0:
        {
            talk.setAnimationListener(this);
            talk.playtimes(1,24);
            startService(new Intent(this, love1.class));
            break;
        }
        case 1:
        {
            talk.setAnimationListener(this);
            talk.playtimes(1,12);
            startService(new Intent(this, love2.class));
            break;
        }
        }
4

5 に答える 5

8

50:50 分布で true または false を返すjava.util.Randomオブジェクトを使用して呼び出すだけです。nextBoolean()のように簡単Math.PI

于 2012-12-05T04:07:04.443 に答える
5

これは常に切り捨てられます。

talka = (int)(Math.random() * 1); // between 0 and 0

あなたが意図したのはおそらく

talka = (int)(Math.random() * 2); // between 0 and 1

ただし、Math.random() を使用して 1 ビットを取得するのは非常に非効率的です。

いずれかでランダムを使用する場合

talka = random.nextInt(2);

またはさらに良い

talk.setAnimationListener(this);
if (random.nextBoolean()) {
        talk.playtimes(1,24);
        startService(new Intent(this, love1.class));
} else {
        talk.playtimes(1,12);
        startService(new Intent(this, love2.class));
}
于 2012-12-05T09:35:02.703 に答える
3

変数talkaは常にゼロです。Math.random は、0 <= x < 1 の値を返します。x は 1 未満でなければならず、(int)キャストによって小数部分が切り捨てられるため、整数の結果は常に 0 になります。

Math.random ドキュメントから:

0.0 以上 1.0 未満の正符号付きの double 値を返します。

java.util.Random.nextBoolean()代わりに使用してください。

于 2012-12-05T04:44:43.820 に答える
2

-と一緒に行く方が良くて簡単java.util.Randomです。

-nextBoolean()その方法を使用してください。

例えば:

public class Rand {

    public static void main(String[] args){

        Random r = new Random();

        System.out.println(r.nextBoolean());  // See there is a equal
                                                      // true-false division
    }

}
于 2012-12-05T04:21:31.423 に答える
2

問題は、キャストの働き方に関係しています。

5 月のテストでは、Java は基本的に 10 進数の結果を「トリミング」し、単純に「整数」コンポーネントを取得していました。ただし、結果を四捨五入すると、0 と 1 の間で反転します。

遊びましょう

int ones = 0;
int zeros = 0;
for (int index = 0; index < 100; index++) {

    double rand = Math.random() * 1;
    if (Math.round(rand) == 1) {
        ones++;
    } else {
        zeros++;
    }
    System.out.println(rand + " - " + (int)Math.round(rand) + " - " + (int)Math.random() * 1);

}

System.out.println("Ones = " + ((float)ones / 100f));
System.out.println("Zeros = " + ((float)zeros / 100f));

私の簡単なテストでは、50/50 マーク (+/-) を取得していました。

Hovercraft で指摘されているようjava.util.Randomに、この場合は使用することをお勧めします。

于 2012-12-05T04:15:31.133 に答える