3

整数の範囲が与えられた場合、その範囲で 5 で割り切れるランダムな整数を生成するにはどうすればよいですか?

Javaを使用しています

4

5 に答える 5

6

通常のランダムな整数を生成し、5 を掛けるだけです!

詳細:[0, n)は範囲内の 5 の倍数であるランダムな整数を生成し、nそれを 5 倍して最小の倍数を足します。

ワンライナー:( System.out.println(rnd.nextInt(max / 5 - (min + 4) / 5 + 1) * 5 + (min + 4) / 5 * 5);非負で有効な引数を想定)

クレジット:ここ(min + 4) / 5 * 5からの最小の複数表現と、@ Thomasの(imoは現在正しくない)回答に基づいて表現を少し簡略化しました

于 2013-10-13T02:30:02.023 に答える
1

この質問は、範囲内の 5 のピリオドの数ではなく、範囲内の 5 の倍数を要求します。

このソリューションは、ネガと範囲の有効性を処理します。

    // because Java's % operator doesn't do what one might expect with negatives

    int lbound = (min+4) - (((min+4) % 5) + 5) % 5;
    int ubound = max - (((max % 5) + 5) % 5);

    if (lbound > ubound) {
        // do something about the range error
    }

    if (lbound == ubound) {

        return lbound;
    }

    int range = ((ubound - lbound)/5) + 1;

    return ((int)(Math.random() * range) * 5) + lbound;
于 2013-10-13T02:44:43.600 に答える
-3

値の間で乱数を選択し、それが div で割り切れるかどうかをテストします。そうでない場合は、div で割り切れる数に到達するために、最大 div-1 の反復で実行する必要があります。

あなたの状況では、 rBetweenGenerator(min, max, 5) を呼び出します

public int rBetweenGenerator(int min, int max, int div)
{
  int res = min + ((new Random()).nextInt(max - min + 1))
  for(int i = res; i < res + div; i++)
  {
    if( i % div == 0 )
    {
      return i;
    }
  } return -1; //error
}
于 2013-10-13T02:26:03.940 に答える