2

我在流程建模的上下文中对图形数据库进行性能审查。因此,我设置了一个简单的测试用例来跟踪简单插入到嵌入式 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 返回特定创建的对象(模型或语言)。我目前面临的问题是向模型随机分配语言不起作用。脚本将每个模型分配给一个语言对象。在我看来,它应该随机分配语言给模型。

4

2 回答 2

2

问题不在于随机分配:

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

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

于 2013-07-11T12:03:14.513 回答
1

这不是你的问题,但这是一个问题:Math.random 返回一个介于 0 和 1 之间的双精度数。将其乘以 9 并舍入不会给你一个公平的分布(零和九的出现频率只有你的一半) d想要)。改变:

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

更像是

Random randomGenerator = new Random();
...
int fin = randomGenerator.nextInt(10);
于 2013-07-11T11:50:55.000 回答