0

これをコードに実装するにはどうすればよいですか?3つの別々のfloatのユーザー入力を取得しています.1つに追加する必要があります(つまり.333333、.333333、.333333)これらの数値は、数値(-1,0,1)が存在する確率です無作為に選んだ。

if( new Random().nextDouble() <= 0.333334){array[i]=randomNumber(-1,0,1)?

またはそれらの線に沿った何か?

4

2 に答える 2

1

多くの (ほとんどの) 実数は float として正確に表すことができないため、3 つの float を加算して正確に1.0 になる可能性は非常に低くなります。最善の方法は、2 つの数値を入力して 3 番目の数値を計算することです。これにより、合計が 1.0 になることが保証されます。

于 2012-11-16T06:19:47.143 に答える
0
public static void main(String[] args) {
    double[] probs = readProbabilities();
    double random = new Random().nextDouble();
    int randomNumber;
    if (random <= probs[0]) {
        randomNumber = -1;
    } else if (random <= (probs[0] + probs[1])) {
        randomNumber = 0;
    } else {
        randomNumber = 1;
    }
    System.out.println("Random Number is " + randomNumber);
}

public static double[] readProbabilities() {
    Scanner sc = new Scanner(System.in);
    double first, second, third;
    System.out.print("Please insert 1st probability: ");
    first = sc.nextDouble();
    while (first < 0.0 || first > 1.0) {
        System.out.print("Must be between 0.0 and 1.0, try again: ");
        first = sc.nextDouble();
    }
    System.out.print("Please insert 2nd probability: ");
    second = sc.nextDouble();
    while (second < 0.0 || (first + second) > 1.0 ) {
        System.out.print("Must be between 0.0 and " + (1.0 - first) + ":");
        second = sc.nextDouble();
    }
    third = 1.0 - (first + second);
    System.out.println("3rd Possibility is " + third);
    return new double[] {first, second, third};
}

質問?

于 2012-11-16T09:22:30.787 に答える