所以我有以下代码
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 ....有人可以告诉我它有什么问题吗?
答案 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();
(好吧......上面例子中与“风格”相关的“致命”错误不是你所做的。但这并不能使我的观点无效。)