2012-09-13 114 views
-3

我的教授要求我們生成0到0.5之間的隨機變量。我寫了這個代碼:Java中的隨機變量

public class Random_Number_Generator { 

    double randomGenerator() { 
    Random generator = new Random(); 
    double num = generator.nextDouble() * (0.5 - 0); 
    return num; 
    } 
} 

但是我的教授是說這個代碼生成隨機數隨機變量。這意味着什麼?

+2

你的教授需要更好地解釋他[她]的自我。也許意圖是將數字存儲在某個地方,如數組。 – paxdiablo

+0

你能給我你的作業詳情嗎?像你的老師究竟要求你做什麼? – amod

+1

這個問題有問題嗎? (順便說一句,爲什麼你減去一個常數零?你可能會在你的腦海中做'0.5 - 0'。) – yshavit

回答

2

顯然我誤讀了帖子;應該仔細閱讀以下內容。


在該代碼中,numgenerators是局部變量。隨機數(一個)是使用隨機對象generator可變命名分配給可變稱爲num。最後,從該方法返回存儲在變量num中的

在任何情況下,generator.nextDouble()返回[0,1)之間的值,從而獲得[0,0.5)之間的值,只需一半縮放:除以二,或者爲已完成,通過半相乘。

上面的代碼中的- 0是愚蠢的,但「好吧」,因爲(0.5 - 0) == 0.5


(同樣,這是很好的進入的實踐創造一個隨機實例,並重新使用它..雖然這個問題是在.NET中更爲明顯。)

+0

我明白所有的......但根據我的教授......這段代碼產生0到0.5之間的隨機數,但他希望0到0.5之間的隨機變量 –

+1

@RahulBhatia現在我很困惑。這完全沒有意義,而且看起來我誤解了最初的帖子!我建議要求教練澄清包括樣本輸出:)也許教官的意思是「隨機變量*名稱*」? – 2012-09-13 07:09:48

-1

試試這個代碼:

public static void main(String[] arg) { 
    System.out.print(Random()); 
} 

public static double Random() { 
    double START = 0; 
    double END = 0.5; 
    Random random = new Random(); 
    double token = RandomNumber(START, END, random); 
    return token; 
} 

public static double RandomNumber(double aStart, double aEnd, Random aRandom) { 
    if (aStart > aEnd) { 
     throw new IllegalArgumentException("Start cannot exceed End."); 
    } 
    // get the range, casting to long to avoid overflow problems 
    double range = aEnd - aStart; 
    // compute a fraction of the range, 0 <= frac < range 
    double fraction = (range * aRandom.nextDouble()); 
    double randomNumber = (fraction + aStart); 
    return randomNumber; 
} 
+0

這似乎是一個非常模糊的方式,做準確的事情,提問者已經提出。這裏沒有什麼與random.nextDouble()* 0.5d 顯着不同。此外,您沒有在此代碼中解釋您的意圖。 –

1

現在,實際隨機變量是,據我所知,功能映射以它們的概率。我不認爲你應該返回一個函數,所以我劃傷這樣的:最接近我猜你應該做的:

import java.util.*; 
import java.lang.*; 

class RandomVar 
{ 
    TreeMap<Double, Integer> variables; 

    public RandomVar() 
    { 
     variables = new TreeMap<Double, Integer>(); 

     int count = Main.RandGen.nextInt(15); 
     double probabilityLeft = 1.0; 
     for (int i = 0 ; i < count - 1; i++) 
     { 
      int toPut = Main.RandGen.nextInt(100); 
      while (variables.containsValue(toPut)) toPut = Main.RandGen.nextInt(100); 
      double prob = probabilityLeft * Main.RandGen.nextDouble(); 
      variables.put(prob, toPut); 
     } 
     int toPut = Main.RandGen.nextInt(100); 
     while (variables.containsValue(toPut)) toPut = Main.RandGen.nextInt(100); 
     double prob = probabilityLeft; 
     variables.put(prob, toPut); 
    } 

    public int getValue() 
    { 
     double rand = Main.RandGen.nextDouble(); 
     double sum = 0; 
     for (double prob : variables.keySet()) //keySet() is sorted ascending 
     { 
      if (prob >= rand) 
       return variables.get(prob); 
     } 
     return variables.get(variables.lastKey()); 
    } 

    //Shows probabilities of values 
    public void test() 
    { 
     for (double key : variables.keySet()) 
      System.out.println(key + " :: " + variables.get(key)); 
    } 
} 

class Main 
{ 
    public static Random RandGen = new Random();  

    public static void main (String[] args) 
    { 
     RandomVar rv = new RandomVar(); 
     rv.test(); 
     System.out.println("------------------------------"); 
     for (int i = 0; i < 40 ; i++) 
      System.out.print(rv.getValue() + ", "); 
    } 
} 

這是非常糟糕的解決方案,基本上是這個類允許你用一組(隨機)概率返回值。我仍然不知道這是不是你的教授想要的......