2016-03-30 11 views
-1

0から1の間のランダムな小数を生成する方法を見つけようとプロジェクトに取り組んでいます。 (int)番号を増減するマルチスレッドプロジェクトを作成する。intに格納された0から1の間のランダムな小数点、Java

これまで私は0に初期化されたプライベートint番号とランダムジェネレータを宣言しました。

これを動作させるためには、0と1の間のランダムな小数点(I.E. 0.564184)を取得し、それをnumberに加算することが望まれます。

プログラムが設計されている方法は、数値が1より小さいかどうかをチェックし、それにランダムな小数点を追加する場合はチェックを実行し、1を超えるか、次の数値が1を超えるまでチェックを実行します。

私は Java random number between 0 and 0.06 に例を見ましたが、私はそれを添付し、これにそれを修正する場合:

while(number < max) 
      {   
      double increase = random.nextInt(2); 
      increase = increase/10.0; 
      number = (int) (number + increase); 
      System.out.println(number); 
      } 

プログラムは、継続的にちょうど0年代をプリントアウト実行します。私はこれが印刷前に番号を追加するときにintへのキャストによるものだと信じています。私はちょうど今、私はこだわっています
number = number - random.nextInt(1) + 1; System.out.println(number);

を使用する場合、スレッドが動作してい

は、別のガイドを見て、私は私が探していながら、私は助けを求める必要があると思いました。早めにありがとう。

+0

を行うには、より効率的であるが、あなただけの変数を作ることができません「数」ダブルへ整数の代わりに? – Michael

+0

これはマルチスレッドとは何が関係していますか? –

+2

「0」と「1」の間に整数値はありません。 –

答えて

2

私はあなたの質問を理解していれば、あなたは単には一様乱数ジェネレータのシーケンスから0.01.0間のdouble値を分散し、次の擬似乱数を返すRandom.nextDouble()を使用することができます。何かのように、

while(number < max) 
{   
    number += random.nextDouble(); // <-- will round up for 0.5+ 
    System.out.println(number); 
} 

あなたはハーフアップと半分は同じままにしたい場合は、

while (number < max) 
{ 
    number += random.nextBoolean() ? 1 : 0; 
    System.out.println(number); 
} 
+0

私はこの構造に従ってフロートを使い終わった。今、ロック状態の問題にぶち当たっています。新しい質問を投稿しようとしています。 – NWcis

+0

@NWcis 'float'の代わりに' nextBoolean'を使うことができます。私の編集を参照してください。 –

1

10進値を保持することはできません。変数をFloatまたはDoubleに変更すると、問題が解決されます。

関連する問題