2

我正在编写一个小代码,它使用线程使用 Jama 和 svd() 方法从矩阵 A 访问矩阵 U、S 和 V,但我面临着 Java Null 指针异常等困难。我的代码是这样的:

public class SVD implements Runnable
    {
    private Thread t;
    public Matrix A;
    public int option;
    public Matrix result;

    public SVD(Matrix A, int optiune)
    {
        this.A = A;
        this.option = optiune;
    }

    @Override
    public void run()
    {
        if (option == 1)
            result = A.svd().getU();
        if(option ==2)
            result=A.svd().getS();
        if(option ==3)
            result=A.svd().getV();
    }

    public void start()
    {
        if (t == null)
        {
            t = new Thread(this);
            t.start();
        }

    }

}

现在,当我尝试像这样创建 3 个 SVD 对象时:

 Matrix A = Matrix.random(20, 20);
    SVD a1 = new SVD(A, 1);
    SVD a2 = new SVD(A, 2);
    SVD a3 = new SVD(A, 3);
    a1.start();
    a2.start();
    a3.start();
    Matrix U=a1.result;

最后一行是得到错误的行。什么可能导致问题?这是我错过的东西吗?

PS:抱歉格式化我不知道为什么会这样!

4

1 回答 1

0

结果来自 Matrix 类型,尽管您的 a1 指向某个东西,但 a1.result 可能为空,请尝试在执行最后一行之前调用 run 方法,例如:

Matrix A = Matrix.random(20, 20);
SVD a1 = new SVD(A, 1);
SVD a2 = new SVD(A, 2);
SVD a3 = new SVD(A, 3);
a1.start();
a2.start();
a3.start();
a1.run();
Matrix U=a1.result;

检查 a1.run() 行,这是为了从 a1 初始化结果字段。

于 2016-01-26T20:02:30.573 回答