2014-10-18 98 views
0

我試圖在Java中實現一個隨機向量生成器,它生成正態分佈的double值作爲蒙特卡洛模擬的一部分。到目前爲止,我的方法是編寫一個類,GaussianRandomNumberGenerator,它使用apache commoms庫來構建其具有2個鍵輸入,矢量長度和一個RandomGenerator的同名對象。Java - 實現產生正態分佈的數字的隨機向量生成器

package mcPkg; 

import org.apache.commons.math3.random.RandomGenerator; 

public abstract class GaussianRandomNumberGenerator implements RandomVectorGenerator{ 

    private int N; 
    private RandomGenerator rg; 

    public GaussianRandomNumberGenerator(int N, RandomGenerator rg){ 
     this.N = N; 
     this.rg = rg; 
    } 

    public double nextNormalizedDouble() { 
     return rg.nextGaussian(); 
    } 

    @Override 
    public double[] getVector() { 
     double[] vector = new double[N]; 
     for (int i = 0; i < vector.length; ++i){ 
      vector[i] = nextNormalizedDouble(); 
     } 
     return vector; 
    } 

} 

類應該然後利用一個接口,RandomVectorGenerator,在主程序(我將需要與其他類的其他任務的接口):

package mcPkg; 

public interface RandomVectorGenerator { 

    public double[] getVector(); 

} 

不幸的是,當我嘗試在主程序中運行測試,出現錯誤提示:

無法實例化類型GaussianRandomNumberGenerator

與問候局部變量grng(見下面的代碼):

package mcPkg; 

import org.apache.commons.math3.random.GaussianRandomGenerator; 
import org.apache.commons.math3.random.RandomGenerator; 

import mcPkg.GaussianRandomNumberGenerator; 
import mcPkg.RandomVectorGenerator; 

public class MonteCarloTest { 

    public static void main(String[] args) { 
     RandomGenerator rg; 
     GaussianRandomNumberGenerator grng = new GaussianRandomNumberGenerator(10, rg); 
     grng.getVector(); 
    } 

} 

上爲什麼發生這種情況,以及建議爲有效解決這一問題的任何見解,將不勝感激。提前致謝!

回答

2

我認爲abstract關鍵字是問題所在。我建議將它從GaussianRandomNumberGenerator類中刪除。

+0

謝謝!它像一個魅力。對Java的新手狀態進行另一個監督。非常感謝您的協助。 – user2736224 2014-10-19 00:00:31

+0

但是RandomGenerator沒有正確初始化?怎麼做? – user77005 2016-01-20 11:06:02