2012-11-16 28 views
0

我該如何實現這個代碼我需要三個單獨的浮點數的用戶輸入,這些浮點數必須加一(即.333333,.333333,.333333)這些數字是數字的概率(-1,0,1)隨機挑選。三個浮點數的概率

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

或者沿着這些線?

+5

請注意。多解釋一下你的問題。 – Azodious

回答

1

由於很多(大多數)實數不能完全表示爲浮點數,所以三個浮點數將會加到的準確性爲 1.0的可能性非常低。你可以做的最好的是輸入兩個數字並計算第三個數字,這可以保證它們總計爲1.0。

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}; 
} 

有問題?