1

Math.random を使用して 1 ~ 4 の数値 (整数) を生成したいと思います。ダブルまたは大きなダブルを取得することに成功しただけで、最小値と最大値に制限を設定する方法がわかりません。

数学.ランダム(); = double として 0-1 の間の何か?

num = Math.random() * 60 + 25; のような提案をしている人を見たことがあります。しかし、それが何をするのか、どのように機能するのかわかりません。

これが本当の質問かどうかわからないので、削除する必要があるかどうかお気軽にお知らせください。

編集:プログラムが実行されるたびに数字を繰り返さずにランダムにする方法はありますか?

4

5 に答える 5

1

Math.Randomここでは冗長ですRandom。クラスを使用してください。

Random rand = new Random();
rand.nextInt(4)+1; //starts at 0, so add 1

このクラスを次の方法でインポートします。

import java.util.*;またimport java.util.Random;

于 2013-10-09T03:28:45.433 に答える
0
  Random rand = new Random();
  System.out.println(rand.nextInt(4) + 1); // we add 1 because it starts with 0
于 2013-10-09T03:35:30.343 に答える
0

本当に使用Math.randomする必要がある場合は、乗算 (および追加) する必要があります。かなり基本的な数学ですが、Math.random()

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

したがって、X で乗算すると、0.0 以上で X 未満の数値が得られます。それを int にキャストして小数を取り除きます。偶数だけが必要な場合は、いくつかのことを行うことができますint even = (notSureIfEven >> 1) << 1;。[「偶数」の数字は実際には「整数」を意味していると思いますが、その場合は無視してかまいません。] 次に、範囲を 0->X ではなく Y-> X 結果に Y を追加するだけです (乗算の前に X から Y を減算してください。そうしないと、範囲が Y->X+Y になります)。

同じ数を 2 回生成しないようにするには、別のことを行うことができます。1 つの方法は、これまでに生成したすべての数値を a に保存しList、新しい数値を生成するときに、containsその数値が既にリストされているかどうかを確認し、そうであれば、リストにない数値が得られるまで新しい数値を生成します (そして次に、明らかにそれをリストに追加する場合)。もう 1 つの方法は、生成できるすべての数値をリストにプリロードしてから、そのリストから乱数を削除することです。

ただし、どちらの方法でも、非常に大きな範囲の数値にはうまくスケーリングできない可能性があります。1 つ目は、まだ生成されていない数値を見つけようとして非常に長いループに陥る可能性があるためです。2 つ目は、最初に非常に大きなリストを作成する必要があるためです。本当に大きな範囲の場合に何かできるかどうかはわかりません。

于 2013-10-09T04:00:16.470 に答える