2010-02-26 84 views
1

我有下面的表格创建使用java作为前端和MySQL作为后端。在java中的随机数

mysql> select * from consumer9; 
-------------    
4 rows in set (0.13 sec) 



Service_ID   Service_Type       consumer_feedback 

100     computing           -1 
35      printer            0 
73     computing           -1 
50      data            1 

我已经使用随机数的概念生成了这些值。 我想要得到输出,其中Service_types(打印机,计算,数据)在所有表中均匀分布,其中反馈值1发生的次数最多。

+0

格式化您的问题请 – twodayslate 2010-02-26 04:29:47

+0

我仍然不明白究竟是什么问题在这里。你在问如何生成符合特定分布模式的数据? – 2010-02-26 04:36:20

+4

你的数据库模式是错误的。每个消费者不应该有它自己的表格。一个单独的'consumer'表或者其他来自'services'的外键的东西。另外:'SELECT service_type,COUNT(*)FROM services WHERE(consumer_feedback == 1)GROUP BY service_type' – 2010-02-26 04:38:02

回答

5

java.util.Random可以生成具有合理均匀分布的伪随机数。鉴于你的服务类型的List

List<String> services = new ArrayList<String>(
    Arrays.asList("COMPUTER", "DATA", "PRINTER")); 

很容易随机选择一项:

String s = services.get(rnd.nextInt(services.size())); 

同样,反馈值的列表中可以选择一个:

List<String> feedbacks = new ArrayList<String>(
    Arrays.asList("1", "0", "-1")); 
String s = feedbacks.get(rnd.nextInt(feedbacks.size())); 

获得不同分配的一个简单方法是“堆叠甲板”。例如,

Arrays.asList("1", "1", "1", "0", "0", "-1")); 

将产生1,0,和-1的概率/,/ 3分别,和/。您可以使用nextGaussian()和合适的confidence interval来安排更精细的分区。

该方法只能用于生成测试数据。

附录:The Apache Commons Math Guide包括关于Data Generation的章节,其中包含有关其他概率分布的信息链接和文档。