Well... As far as I can understand you want an array of "num" walkers. You are properly initializing your array here:
wal = new walker[num];
You are stating that in the object wal there will be a "new" object of type "walker array" and holds "num" number of objects (new walker[num]);
Think of an array as an object pointing to other objects. You need to initialize both the array itself and the objects it points to. That means of course, going over each object and specifying what that object is. You can do this right after your array initialization thus add the lines:
for (int i = 0; i < num; i++) {
wal[i] = new walker(255,167,15);
}
Here, we are iterating over the array, picking each object (wal[i]) and saying that in there should be a new walker with the values 255 167 and 15 (new walker(255,167,15))
If you don't do this, when the program tries to access an object in the array (wal[i]) it finds nothing(null) therefore it throws an nice nullPointerException in your face!
For fun and for profit you can also try this instead:
for (int i = 0; i < num; i++) {
wal[i] = new walker(random(255),random(255),random(255));
}