public class Test {
public int [] x;
public Test(int N)
{
int[] x = new int [N];
for (int i=0;i<x.length;i++)
{
x[i]=i;
StdOut.println(x[i]);
}
}
public static void main(String[] args) {
String path = "/Users/alekscooper/Desktop/test.txt";
In reader = new In(path);
int size=reader.readInt();
StdOut.println("Size = "+size);
Test N = new Test(size);
StdOut.println(N.x[3]);
}
/* ADD YOUR CODE HERE */
}
大家好。我正在通过阅读Robert关于算法的书来学习Java,例如,我正在使用他的库,比如StdOut。但问题是关于Java的。我不明白为什么这里的Java会抛出一个NullPointerException。总的来说,我知道这意味着什么,但我不知道为什么会出现在这里,因为我认为我在做的是:
为什么会这样呢?请帮忙,非常感谢您的时间。
发布于 2015-05-31 23:30:33
您所做的被称为跟踪--您用局部变量x
跟踪了字段x
。所以你要做的就是避免这样做:
int[] x = new int [N];
是错误的,如果您希望您的字段初始化而不是局部变量,那么您可以执行如下操作:x = new int [N];
获取更多信息,请阅读this。
发布于 2015-05-31 23:28:09
将构造函数的第一行更改为
int[] x = new int [N];
至
x = new int [N];
应该管用的..。
实际上,在构造函数中,当您说int[] x时,它正在创建多一个局部变量,而不是将数据设置为公共变量x.如果从构造函数的第一行中删除int[],那么它将初始化公共变量&您将能够在main()方法中打印它们
发布于 2015-05-31 23:25:32
public Test(int n)
**:**内部的
变化
int[] x = new int [N]; // Creating a local int array x
至
x = new int [N]; // Assigning it to x
https://stackoverflow.com/questions/30567802
复制