nullpointerexception错误随机

时间:2011-02-21 00:21:06

标签: java compilation nullpointerexception

所以我有以下代码

public void rand(int N){

  double[]x=new double[N];
  double[]y=new double[N];
  double[][]res=new double[N][N];
  for(int i=0;i<N;i++){x[i]=random.nextDouble();y[i]=random.nextDouble();}

}

但它会在for循环中返回nullpointerexceptionerror ....有人可以告诉我它有什么问题吗?

5 个答案:

答案 0 :(得分:2)

你在哪里初始化随机?我没有看到它。

您还有另一个问题:声明,初始化x和y数组以及res矩阵,并在离开方法时立即超出范围。所有这些工作都浪费了。

我想的更像是这样:

import java.util.Random;

/**
 * MatrixTest
 * @author Michael
 * @since 2/20/11
 */
public class MatrixTest
{
    private static final int DEFAULT_SIZE = 3;
    private double [] x;
    private double [] y;
    private int n;

    public static void main(String[] args)
    {
        MatrixTest m = new MatrixTest();
        System.out.println(m);
    }

    public MatrixTest()
    {
        this(DEFAULT_SIZE);
    }

    public MatrixTest(int n)
    {
        this.init(n);
    }

    public void init(int n)
    {
        Random random = new Random(System.currentTimeMillis());

        this.x = new double[n];
        this.y = new double[n];
        this.n = n;
        for (int i = 0; i < this.n; i++)
        {
            x[i] = random.nextDouble();
            y[i] = random.nextDouble();
        }
    }

    @Override
    public String toString()
    {
        final StringBuilder sb = new StringBuilder();
        sb.append("MatrixTest");
        sb.append("{x=").append(x == null ? "null" : "");
        for (int i = 0; x != null && i < x.length; ++i)
        {
            sb.append(i == 0 ? "" : ", ").append(x[i]);
        }
        sb.append(", y=").append(y == null ? "null" : "");
        for (int i = 0; y != null && i < y.length; ++i)
        {
            sb.append(i == 0 ? "" : ", ").append(y[i]);
        }
        sb.append(", n=").append(n);
        sb.append('}');
        return sb.toString();
    }
}

答案 1 :(得分:1)

random似乎是该代码段中唯一的对象,其他一切都是原语。哪个random被实例化?

答案 2 :(得分:1)

据我所知,除了随机变量外,一切看起来都很好吗?它在哪里定义?另外,错误信息是什么?

基于此,我怀疑随机变量是未初始化的。

答案 3 :(得分:0)

random null是否可能?

答案 4 :(得分:0)

我没有看到random的声明。我假设它是在封闭类中声明的实例变量。如果是这样,我怀疑random尚未使用对Random对象的引用进行初始化。使用... = random.nextDouble();对象引用执行null语句时,结果为NPE。


顺便说一句,如果你用循环语句修复了令人震惊的样式问题,你的问题来源就会更容易被发现。

for (int i = 0; i < N; i++) {
    x[i] = random.nextDouble();  // NPE on this line
    y[i] = random.nextDouble();
}

好的风格是最好的做法。花几秒钟来正确格式化你的代码可以在你/别人阅读它时节省几分钟,如果你的坏风格掩盖了一个bug,可以节省几个小时(甚至几天)......就像这样:

for(i=0;i<N;i++)x[i]=random.nextDouble();y[i]=random.nextDouble();

(好吧......上面例子中与“风格”相关的“致命”错误不是你所做的。但这并不能使我的观点无效。)