2013-07-11 90 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];儘管如此,這不是他的問題(他一直得到相同的號碼)。 –