1

私は次の方法を持っています:

public LinkedList<Object> init(int counter) {
    LinkedList<Object> list = new LinkedList<Object>();
    double decision, value, key;
    int max1 = 700;
    int max2 = 1000;

    for (int i = 0; i < counter; i++) {
        decision= Math.random();

        if (decision<= 0.2) {
            key = Math.random() * 1.5;
            value= Math.random() * max1 ;
            list.add(new A(value, key));
        } else {
            value= Math.random() * max2 ;
            list.add(new B(value));
        }
     }

     return list;
}

私が得る問題はこれです:私がこのメソッドを使用して呼び出す場合

init(100);

次に、結果のリストのサイズを確認します。常にそうであるとは限りません100max1代わりに、リスト内の要素の数は、と で選択した値によって異なりますmax2。たとえば、選択max2 = 1000000すると、約 15 個の要素のリストになります。これは仕組みと関係があると思いますが、Math.random()どのように起こるのかわかりません。スレッドに関する問題ですか?

誰かがこれを試してみたい場合に備えて、クラスのテンプレートAB(その動作はこれには影響しません) を次に示します。

public class A {
    public A(double value, double key) {}
} 

public class B {
    public B(double value) {}
}
4

1 に答える 1

5

Math.random() がバックグラウンドでスレッドを実行している可能性があると思いました。自分で追加のスレッドを作成しませんでした。

いいえ、Math.random()バックグラウンドでスレッドを実行しません。

実際、あなたの機能は完全に問題ありません。私はそれを広範囲にテストしましたが、まさに期待どおりの動作をします。常にcounter要素を正確に返します。

したがって、あなたの問題は他の場所、つまりあなたが示しているコードの外にあると結論付けなければなりません。

于 2012-12-21T15:40:10.823 に答える