-3

オブジェクトが 2 つの数値の間の値を返すようにするプログラムがあります。しかし問題は、ほとんどの場合、得られる数値が境界内にないことです。コードは次のとおりです。

public int getSize() {
  int s = (int)Math.random() * (max - min) + min;
  return s;
}

最小値と最大値は両方ともコードで 320 と 640 として定義されていますが、必要な値よりも低い値が得られることがあります (たとえば、283 を取得したことがあります)。誰か助けてくれませんか?

4

2 に答える 2

5

283if min/ maxare 320/を取得する方法がわかりません640

とはいえ、コードには常に を返すバグがありますmin。それを修正するには、次を使用します。

int s = (int)(Math.random() * (max - min) + min);

追加された括弧に注意してください。それらがなければ、 to の結果をキャストしていMath.random()ますint。これは常にゼロを返し、式全体を に評価しminます。

于 2012-12-12T18:00:16.603 に答える
2

C# にアクセスできる場合は、次のことを試していただけますか? これは機能的にはタスクと同等であり、320 と 640 の範囲外の数値を生成するべきではありません。その場合は、Java コードのロジックを比較して、どこが間違っているかを確認できます。

namespace TestRand
{
    class TestRand
    {
        private static Random r;

        private const int min = 320;
        private const int max = 640;

        public static void Main()
        {
            r = new Random();
            for (int i = 0; i < 1000; i++)
            {
                Console.WriteLine("{0} - {1}", i, getSize());
            }
        }

        public static int getSize()
        {  
            int s = (int)(r.NextDouble() * (max - min)) + min;
            return s;
        }
    } 
}
于 2012-12-12T18:22:19.340 に答える