0

ボタンが押されたときに ListArray からランダムな文字列を取得しようとしています。常に同じ 2 番目の要素を取得します。配列がどれほど大きくても。

キーを押したときに私が持っているものは次のとおりです。

int randIndex = getRandomIndex(ListArray.size());
String chosenItem = ListArray.get(randIndex);

メソッドgetRandomIndexは事前に要求され、次のようになります。

public int getRandomIndex(int size) {
        return (1+(int)Math.random()*size);
    };
4

1 に答える 1

3

からのキャストは、による乗算intよりdoubleも優先されsizeます。にキャストMath.random()するintと、小数点が削除され、結果は になり0ます。したがって、getRandomIndexは常に を返し1ます。

言い換えると、

return (1 + (int) [some double variable] * size);

と同じです

return 1 + (0)*size;

これはと同じです

return 1;

次の方法で修正します。

private static final Random rand = new Random();

public int getRandomIndex(int size) {
    return rand.nextInt(size);
}

これにより読みやすくなり、乱数が均等に分散されます。

于 2012-06-18T01:42:39.537 に答える