2016-08-09 4 views
0

私は雪ボールをペイントボールとして扱うBukkitプラグインを書いています。私が誤って使用する場合:Random.nextInt(16)が完璧に動作する間、Random.nextInt()%16が歪んでいるのはなぜですか?

(byte) (random.nextInt() % 16) 

代わりの

(byte) (random.nextInt(16)) 

私は下の数字は高い数字以外の方法より登場していることに気づきました。なぜそれが起こるのですか?

例:前:

00010 
01200 
06001 
30010 
00502 

例:後:

74108 
73447 
98956 
17386 
26574 
+0

あなたのコードがあなたの出力とどのように関係しているかは、まったく明確ではありません。あなたは問題を示す[mcve]を提供できますか? –

+0

どのような研究をしましたか?ヒストグラムを作成して、その分布がどうなっているかを確認しましたか?それはあなたの期待に対応していましたか?あなたはその行動を説明するためにどのような仮説を立てましたか?バイトキャストは関連性があると思いますか?スタックオーバーフローは最後の手段でなければなりません。「ちょっと興味がありません - それを聞かせてください」。 –

+0

0-15の範囲の整数を返すので、表示する数値はいずれの式からも出ることはできませんでした。 –

答えて

3

random.nextInt()も負の値を返すことができますし、私のプログラムがゼロとネガを治療して、 は、Aのためのチャンスを三倍 を倍増ゼロが発生する。

+0

ニースキャッチ!そして、ええ、 '% '演算子は人を騙すことができます - それは多くの人々がそう思う"モジュロ "を意味するものではなく、"残り "を意味します。違いは、Remainderは負であり、Moduloは常に正であるということです。 –

関連する問題