【问题标题】:NPE in simple sketch简单草图中的 NPE
【发布时间】:2013-09-03 17:32:07
【问题描述】:

我发现很难理解数组对象。在这种情况下,我不知道为什么 'wal[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();
  }
}



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);
  }
}

然后我添加了一些填充文本,因为我被告知我已经发布了太多的代码,而不是我拥有的文本数量,即使代码上方的文本充分解释了问题而不会成为傲慢或偏离主题。

【问题讨论】:

    标签: processing arrayobject


    【解决方案1】:

    嗯...据我所知,您需要一组 "num" 个步行者。您在这里正确地初始化了您的数组:

    wal = new walker[num];
    

    您是说在对象 wal 中会有一个 "new" 类型为 "walker array" 的对象并持有 "num" 对象的数量(new walker[num]);

    将数组视为指向其他对象的对象。您需要初始化数组本身和它指向的对象。这当然意味着检查每个对象并指定该对象是什么。您可以在数组初始化后立即执行此操作,因此添加以下行:

    for (int i = 0; i < num; i++) {
      wal[i] = new walker(255,167,15);
    }
    

    在这里,我们遍历数组,选择每个对象 (wal[i]) 并说其中应该有一个新的 walker,其值为 255 167 和 15 (new walker(255,167,15))

    如果你不这样做,当程序试图访问 数组中的一个对象 (wal[i]) 时它会发现 nothing(null) 因此它在你的脸上抛出一个漂亮的 nullPointerException!

    为了好玩和盈利,你也可以试试这个:

    for (int i = 0; i < num; i++) {
      wal[i] = new walker(random(255),random(255),random(255));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多