2012-09-13 90 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() + ", "); 
    } 
} 

这是非常糟糕的解决方案,基本上是这个类允许你用一组(随机)概率返回值。我仍然不知道这是不是你的教授想要的......