2013-07-11 57 views
1

即时进行图形数据库在过程建模环境中的性能审查。 因此,我设置了一个简单的测试用例,用于跟踪简单插入嵌入式N4J数据库的性能。这是我的测试用例的摘录。在Java中生成随机对象

@Test 
    public void insertQuants(){ 
     int size =750; 
     /** 
     * create 10 different languages and store them in the ArrayList 
     */ 
     ArrayList<Language> lngs = new ArrayList<Language>(); 
     for(int i=0; i<10; i++){ 
      String title = "Testsprache " + String.valueOf(i); 
      String description = "Beschreibung " +String.valueOf(i); 
      lngs.add(modelservice.createLanguage(title,description)); 
     }   
     /** 
     * Create different models and assign them to different 
     * language objects 
     */ 
     for(int i=0; i<size; i++){ 
      String title = "Testmodel " + String.valueOf(i); 
      //get random between 0 and 9 
      int fin = (int) Math.round(Math.random()*9); 
      //fetch random Language object out of ArrayList 
      Language l = lngs.get(fin); 
      Model m = modelservice.createModel(l, title); 
      l.addModel(m); 
      template.save(l); 
     } 

modelservice中的方法createModel返回特定的创建对象(模型或语言)。 我目前面临的问题是,语言随机分配给模型是行不通的。该脚本将每个模型分配给一个语言对象。在我看来,它应该随机地将语言分配给模型。

回答

1

的问题是不是与随机分配:

int fin = (int) Math.round(Math.random()*9); 

Math.random()返回范围double[0,1),乘以9,得到: [0,9),舍入给出[0,9]。由于CPerkins指出,使用Random可能看起来更简单,可能更好(因为生成数字0到9的概率与您的方法不一致),但您的随机数生成范围是正确的。该问题不在您向我们展示的代码中。也许它在addModel()save()

+0

我建议你做一些更多的测试,一旦你对发生了什么问题有了一个更精确的概念,如果你不能解决它,就发布另一个问题。 –

+0

感谢您的快速响应,我会仔细看看实施的addModel/save方法 –

+0

代码正在工作,这只是我缺乏使用neoclipse跟踪存储在n4j中的节点的能力:)但我会实现对随机元素的更改以获得数字的均匀分布 –

1

这不是你的问题,但是它的a问题:Math.random返回0和1之间的双精度数。乘以9和舍入不会给你一个公平分配(零和九将仅显示一半你想要的频率)。变化:

int fin = (int) Math.round(Math.random()*9); 

到更多的东西一样

Random randomGenerator = new Random(); 
... 
int fin = randomGenerator.nextInt(10); 
+0

怎么样? 9 * [0,1)= [0,9)。舍入给出[0,9]。使用'随机'看起来更简单,但他的工作。 –

+0

它从来没有1.他会得到第九个值比其他值更少,因为没有下舍入。 。 – CPerkins

+0

不够公平,对于0也是如此。编辑您的帖子。范围绝对是[0,9];尽管如此,这不是他的问题(他一直得到相同的号码)。 –