Java—实现一个生成正态分布数字的随机向量生成器

Java—实现一个生成正态分布数字的随机向量生成器,java,random,distribution,apache-commons,Java,Random,Distribution,Apache Commons,我正在尝试用Java实现一个随机向量生成器,它生成正态分布的双值,作为蒙特卡罗模拟的一部分。到目前为止,我的方法是编写一个类GaussianRandomNumberGenerator,它使用ApacheComms库构建同名对象,其中包含两个关键输入,向量长度和一个随机生成器 package mcPkg; import org.apache.commons.math3.random.RandomGenerator; public abstract class GaussianRandomNum

我正在尝试用Java实现一个随机向量生成器,它生成正态分布的双值,作为蒙特卡罗模拟的一部分。到目前为止,我的方法是编写一个类GaussianRandomNumberGenerator,它使用ApacheComms库构建同名对象,其中包含两个关键输入,向量长度和一个随机生成器

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;
    }

}
不幸的是,当我试图在主程序中运行测试时,我得到一个错误,错误是:

无法实例化GaussianRandomNumberGenerator类型

关于局部变量grng(见下面的代码):


如果您能深入了解为什么会发生这种情况,并提出有效解决该问题的建议,我们将不胜感激。提前谢谢

我认为
摘要
关键字是问题所在。我建议将其从
GaussianRandomNumberGenerator
类中删除。

谢谢!它就像一个符咒。把另一个疏忽归咎于我的Java新手身份。非常感谢您的帮助。但是RandomGenerator没有正确初始化?怎么做?
package mcPkg;

public interface RandomVectorGenerator {

    public double[] getVector();

}
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();
    }

}