2013-07-11 2 views
1

im делает обзор производительности графических баз данных в контексте моделирования процессов. Поэтому я установил простой тестовый файл, который отслеживает производительность простых вставок во встроенную базу данных 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); 
     } 

методы createModel в modelservice возвращают определенный созданный объект (модель или язык). Проблема, с которой я сейчас сталкиваюсь, заключается в том, что случайное присвоение языков моделям не работает. Скрипт присваивает каждой модели одному языковому объекту. На мой взгляд, это скорее должно случайным образом привязывать языки к модели.

ответ

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 возвращает double между 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. Он получит 9-е значение реже, чем другие значения, потому что нет округления. , – CPerkins

+0

Достаточно справедливо, это верно и для 0. Редактировать сообщение. Диапазон наиболее определенно [0,9]; тем не менее, это не его проблема (он продолжает получать одинаковое количество). –

Смежные вопросы