Processing 简单素描中的NPE
我发现很难理解数组对象。在这种情况下,我不知道为什么“walk[I].walk();”被视为空指针异常Processing 简单素描中的NPE,processing,arrayobject,Processing,Arrayobject,我发现很难理解数组对象。在这种情况下,我不知道为什么“walk[I].walk();”被视为空指针异常 walker[] wal; int num= 70; void setup() { size(800, 600); wal = new walker[num]; background(255); } void draw() { for (int i = 0; i < num; i++) { wal[i].walk(); wal[i].display()
walker[] wal;
int num= 70;
void setup() {
size(800, 600);
wal = new walker[num];
background(255);
}
void draw() {
for (int i = 0; i < num; i++) {
wal[i].walk();
wal[i].display();
}
}
class walker {
int x, y;
float r, g, b;
walker(float red, float green, float blue) {
x = width/2;
y = height/2;
r = red;
g= green;
b= blue;
}
void walk() {
int choice = int(random(4));
if (choice == 0) {
x++;
}
else if (choice == 1) {
x--;
}
else if (choice == 2) {
y++;
}
else {
y--;
}
x = constrain(x, 0, width-1);
y = constrain(y, 0, height-1);
}
void display() {
stroke(r, g, b);
point(x, y);
}
}
walker[]wal;
int num=70;
无效设置(){
尺寸(800600);
沃尔=新沃克[num];
背景(255);
}
作废提款(){
for(int i=0;i
然后,我添加了一些填充文本,因为有人告诉我,我发布了太多的代码,与我拥有的文本数量相比,即使代码上方的文本充分解释了问题,但没有成为赞助人或偏离主题。好吧。。。据我所知,您需要一组“num”walker。您正在此处正确初始化阵列:
wal = new walker[num];
您正在声明,在对象wal中,将有一个类型为“walker array”的“new”对象,并保存“num”个对象(new walker[num])
将数组视为指向其他对象的对象。您需要初始化数组本身及其指向的对象。这当然意味着,检查每个对象并指定该对象是什么。您可以在阵列初始化后立即执行此操作,从而添加以下行:
for (int i = 0; i < num; i++) {
wal[i] = new walker(255,167,15);
}
for(int i=0;i
这里,我们在数组上迭代,选取每个对象(wal[i]),并说在中应该有一个值为2551167和15的新walker(newwalker(255167,15))
如果您不这样做,当程序试图访问数组中的对象(wal[i])时,它找不到任何东西(null),因此它会在您面前抛出一个很好的nullPointerException
为了好玩和赚钱,您也可以尝试以下方法:
for (int i = 0; i < num; i++) {
wal[i] = new walker(random(255),random(255),random(255));
}
for(int i=0;i