我正在尝试创建一个“Node”对象的二维数组,如下所示
public static void main(String[] args) throws IOException {
length=getNumber("Enter the length of the field: ");
breadth=getNumber("Enter the breadth of the filed: ");
node n = new node();
node [][] field = new node[length][breadth];
for(i=0;i<=length;i++){
for(j=0;j<=breadth;j++){
F =getNumber("Enter the F value");
field[i][j].setF(F);
System.out.println(" "+field[i][j].getF(F);
}
}
}
在上面的代码中getNumber是一个函数,其中我打印并接受该数字 这是我的节点类:
public class node {
public int F;
public int G;
public int H;
public boolean isVisited;
public boolean isCurrent;
public void node(int F,int G,int H,boolean isVisited, boolean isCurrent){
this.F=F;
this.G=G;
this.H=H;
this.isVisited=isVisited;
this.isCurrent=isCurrent;
}
public int getF() {
return G+H;
}
public void setF(int f) {
F = f;
}
public int getG() {
return G;
}
public void setG(int g) {
G = g;
}
public int getH() {
return H;
}
public void setH(int h) {
H = h;
}
public boolean isVisited() {
return isVisited;
}
public void setVisited(boolean isVisited) {
this.isVisited = isVisited;
}
public boolean isCurrent() {
return isCurrent;
}
public void setCurrent(boolean isCurrent) {
this.isCurrent = isCurrent;
}
}
我想要做的就是,在每个节点对象中存储/访问F,G,H等的各种值,然而问题是我java.lang.NullPointerException
field[i][j].setF(F);
我不知道我哪里出错了,需要一些帮助。
答案 0 :(得分:2)
您初始化了数组,但没有填充它。
考虑这一行:
field[i][j].setF(F);
当你这样做时
field[i][j]
您正在访问该阵列;即在该位置获取阵列中的内容。由于您没有在数组中放置任何内容,因此您将获得null。但是你立刻试着打电话给setF
。
我注意到你做了
node n = new node();
在循环之外。你可能想在循环中这样做。
node n = new node();
n.setF(F);
field[i][j] = n;
此代码创建一个node
实例,在其上设置一个值,然后将其放在指定位置的数组中。更奇特的方法是做一些像
node n = field[i][j];
if (n == null) { // initialize n at the position if it doesn't exist
n = new node();
field[i][j] = n;
}
field[i][j].setF(f);
或者,您可以在初始化数组后立即遍历数组并在每个位置放置一个新的node
。
最后,在Java标准实践中,用大写字母开始类名。 node
应为Node
。
答案 1 :(得分:0)
试试这个:
for(i=0;i<=length;i++){
for(j=0;j<=breadth;j++){
F =getNumber("Enter the F value");
node tmp = new node();
tmp.setF(F);
field[i][j] = tmp;
System.out.println(" "+field[i][j].getF(F);
}
}
PS中的PS它是类名以大写字母开头的惯例,应该用CamelCase编写
[编辑] 请注意你的get / setF()函数,因为它们不对相同的变量进行操作
与您的问题无关,但您可能希望通读此document这将教您如何在java中命名约定并帮助您编写更易于阅读的代码