【问题标题】:Generate random objects in Java在 Java 中生成随机对象
【发布时间】:2013-07-11 11:27:17
【问题描述】:

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

【问题讨论】:

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


    【解决方案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()

    【讨论】:

    • 我建议你做更多的测试,一旦你对出了什么问题有了更准确的了解,如果你不能解决它,再发布一个问题。
    • 感谢您的快速响应,我将仔细研究实现的 addModel / save 方法
    • 代码正在运行,只是我缺乏使用 neoclipse 跟踪存储在 n4j 中的节点的能力 :) 但我将实施对随机元素的更改以获得均匀分布数字
    【解决方案2】:

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

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

    类似于

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

    【讨论】:

    • 不是吗? 9 * [0,1) = [0, 9)。四舍五入给出 [0,9]。使用Random 看起来更简单,但他的工作原理。
    • 永远不会是 1。他得到第 9 个值的频率会低于其他值,因为没有向下舍入。 .
    • 很公平,对于 0 也是如此。编辑您的帖子。范围绝对是 [0,9];尽管如此,这不是他的问题(他一直得到相同的号码)。
    猜你喜欢
    • 1970-01-01
    • 2014-05-13
    • 2019-08-02
    • 1970-01-01
    • 1970-01-01
    • 2015-07-30
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多