これをコードに実装するにはどうすればよいですか?3つの別々のfloatのユーザー入力を取得しています.1つに追加する必要があります(つまり.333333、.333333、.333333)これらの数値は、数値(-1,0,1)が存在する確率です無作為に選んだ。
if( new Random().nextDouble() <= 0.333334){array[i]=randomNumber(-1,0,1)
?
またはそれらの線に沿った何か?
これをコードに実装するにはどうすればよいですか?3つの別々のfloatのユーザー入力を取得しています.1つに追加する必要があります(つまり.333333、.333333、.333333)これらの数値は、数値(-1,0,1)が存在する確率です無作為に選んだ。
if( new Random().nextDouble() <= 0.333334){array[i]=randomNumber(-1,0,1)
?
またはそれらの線に沿った何か?
多くの (ほとんどの) 実数は float として正確に表すことができないため、3 つの float を加算して正確に1.0 になる可能性は非常に低くなります。最善の方法は、2 つの数値を入力して 3 番目の数値を計算することです。これにより、合計が 1.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};
}
質問?