Java 对象数组NullPointerException,处理3.3.6
我试图在处理过程中制作一个简单的3d游戏,但遇到了一个问题。 我试图制作一个数组来跟踪我的环境对象,并使其更易于修改。但是,当我尝试运行该程序时,它将不起作用 主要代码: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]
//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教程,它运行得很顺利。尼斯网站顺便说一句:)