Java 对象数组NullPointerException,处理3.3.6

Java 对象数组NullPointerException,处理3.3.6,java,arrays,object,nullpointerexception,processing,Java,Arrays,Object,Nullpointerexception,Processing,我试图在处理过程中制作一个简单的3d游戏,但遇到了一个问题。 我试图制作一个数组来跟踪我的环境对象,并使其更易于修改。但是,当我尝试运行该程序时,它将不起作用 主要代码: //arrays BoxCl[] envArr; void setup() { size(640, 360, P3D); envArr[0] = new BoxCl(1,1,-1,1); //it shows the error here envArr[envArr.length]

我试图在处理过程中制作一个简单的3d游戏,但遇到了一个问题。 我试图制作一个数组来跟踪我的环境对象,并使其更易于修改。但是,当我尝试运行该程序时,它将不起作用

主要代码:

  //arrays
BoxCl[] envArr;

void setup() {
  size(640, 360, P3D);

  envArr[0] = new BoxCl(1,1,-1,1);              //it shows the error here
  envArr[envArr.length] = new BoxCl(2,1,-1,1);
}

void draw() {
  background(0);
  camera(mouseX, height/2, (height/2) / tan(PI/6), width/2, height/2, 0, 0, 1, 0);
  Update();
  Draw();
}

void Update(){

}

void Draw(){
  for(BoxCl i : envArr){
    i.Draw();
  }
}
BoxCl等级:

class BoxCl{

  float x, y, z;
  int s;

  BoxCl(float x, float y, float z, int size){
    this.x = x;
    this.y = y;
    this.z = z;
    this.s = size;
  }

  void Draw(){
    translate(scale*x, scale*y, scale*z);
    stroke(255);
    fill(255);
    box(s * scale);
    translate(scale*-x, scale*-y, scale*-z);
  }

}
我已经试着查过了,但我觉得我太没经验了,不知道该怎么办

请帮忙


编辑:我知道变量/数组/对象应该在使用前定义。但我如何定义envArr,使其仍然可以更改?(即,当我必须创建或删除对象时,增大或减小大小)

您的
envArr
变量为
null
。在使用它之前,你必须将它初始化为某种东西

你可能想要这样的东西:

BoxCl[] envArr = new BoxCl[10];

无耻的自我提升:我写了一篇关于数组处理的教程。您还应该养成这样的习惯:添加
println()
语句或使用调试器单步执行代码。例如,如果您在抛出错误的行之前打印出
envArr
的值,您自己就会看到它是
null

TL;DR:您从未初始化数组
envArr
您的编辑应该作为一个单独的问题发布,并添加一个新的问题。但是,当我不知道数组的最终大小时,我该怎么办?因为在这种情况下,它限制了可以/必须使用的对象数量。@Mr.Dude\uuu不要使用数组,如果不知道可以使用多长时间,请使用
ArrayList
grow@Mr.Dude__您可以使用Processing的
append()
函数。更多信息请访问。或者更好地使用
ArrayList
。是关于处理中的ArrayList的教程。@KevinWorkman谢谢,现在一切都正常了。我使用了你的Arraylist教程,它运行得很顺利。尼斯网站顺便说一句:)