Question

My code returns an error when I run it, telling me that I have "one too many { characters without a } to match it", but I've checked and rechecked and triple-rechecked and even had someone else check for me, to no avail.

class Ball {
  //Global Vars
  //float x=0;
  //float y=0;
  //float speedx = random(-5,5);
  //float speedy = random(-1,1);

  Vec3D loc = new Vec3D (0, 0, 0);
  Vec3D speed = new Vec3D (random(-4, 4), random(-1, 1), 0);

  Vec3D acc = new Vec3D();

  Vec3D grav = new Vec3D (0, random(0.05, 0.25), 0);

  //construct
  Ball(Vec3D _loc) {

    loc = _loc;
  }

  //functions
  void run() {
    display();
    move();
    bounce();
    //  gravity();
    lineBetween();
    flock();
  }

  void display() {
    stroke(0);
    ellipse(loc.x, loc.y, 20, 20);
  }


  void move() {
    // x += speedx;
    // y += speedy;

    speed.addSelf(acc);
    speed.limit(6);
    loc.addSelf(speed);
    acc.clear();
  }

  void bounce() {
    if (loc.x > width) {
      speed.x = speed.x*-1;
    }
    if (loc.x < width-width) {
      speed.x = speed.x*-1;
    }
    if (loc.y > height) {
      speed.y = speed.y*-1;
    }
    if (loc.y < height-height) {
      speed.y = speed.y*-1;
    }
  }

  void gravity() {
    //speedy += 0.15;

    speed.addSelf(grav);
  }

  void lineBetween() {
    //ballCollection
    for (int i=0; i<ballCollection.size();i++) {
      Ball other = (Ball) ballCollection.get(i);
      float distance = loc.distanceTo(other.loc);
      if (distance > 0 && distance < 80) {
        stroke(255, 0, 255);
        strokeWeight(0.2);
        line(loc.x, loc.y, other.loc.x, other.loc.y);
      }
    }
  }

  void flock() {
    separate();
    // cohesion();
    // align();
  }

  void separate(float magnitude) {
    Vec3D steer = new Vec3D();
    int count = 0;

    for (int i=0; i<ballCollection.size();i++) {
      Ball other = (Ball) ballCollection.get(i);
      float distance = loc.distanceTo(other.loc);
      if (distance > 0 && distance < 40) {

        Vec3D diff = loc.sub(other.loc);
        diff.normalizeTo(1.0/distance);

        steer.addSelf(diff);
         count++;
      }
    }
  }

  if (count>0) {
    steer.scaleSelf(1.0/count);
  }

  steer.scaleSelf(magnitude);
  acc.addSelf(steer);
}

The error message highlights line 106;

if (count>0) {

I've recreated the error on another machine, but seen the code used in a tutorial video without any issue. Any and all help would be greatly appreciated :)

Was it helpful?

Solution 2

count variable is local variable but, you have used it outside of function. steer and acc also same. Update it like below;

void separate(float magnitude) {
    Vec3D steer = new Vec3D();
    int count = 0;

    for (int i=0; i<ballCollection.size();i++) {
      Ball other = (Ball) ballCollection.get(i);
      float distance = loc.distanceTo(other.loc);
      if (distance > 0 && distance < 40) {

        Vec3D diff = loc.sub(other.loc);
        diff.normalizeTo(1.0/distance);

        steer.addSelf(diff);
         count++;
      }
    }

    if (count>0) {
        steer.scaleSelf(1.0/count);
    }

      steer.scaleSelf(magnitude);
      acc.addSelf(steer);
  }

OTHER TIPS

I think your problem is in the line 103, there is one extra }. The if(count>0) line is outside of the method.

You have done a good job indenting, so the location of your braces are correct (you may have used Edit, autoformat). I suggest to my programming students that they comment 'end' curly braces to prevent such issues:

void separate(float magnitude) {
  Vec3D steer = new Vec3D();
  int count = 0;

  for (int i=0; i<ballCollection.size();i++) {
    Ball other = (Ball) ballCollection.get(i);
    float distance = loc.distanceTo(other.loc);
    if (distance > 0 && distance < 40) {

      Vec3D diff = loc.sub(other.loc);
      diff.normalizeTo(1.0/distance);

      steer.addSelf(diff);
      count++;
    }  // end if distance
  }  // end for
}  // end separate method

If you use an IDEA, you can easy to find the compile error, the if(count>0) is out of a method, it seems that you add a "}" before this statement by mistake.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top