在Java中生成随机对象

时间:2013-07-11 11:27:17

标签: java random arraylist neo4j spring-data-neo4j

我在流程建模的上下文中对图形数据库进行性能评估。 因此,我设置了一个简单的测试用例,用于跟踪嵌入式N4J数据库中简单插入的性能。这是我的测试用例的摘录。

@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返回特定的创建对象(模型或语言)。 我目前面临的问题是随机分配语言到模型是行不通的。脚本将每个模型分配给一个语言对象。在我看来,它应该随机地将语言分配给模型。

2 个答案:

答案 0 :(得分:1)

这不是你的问题,但它是一个问题:Math.random返回0到1之间的双精度。将它乘以9和舍入不会给你一个公平的分布(零和九只会出现你想要的一半。变化:

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

更像是

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

答案 1 :(得分: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()