lawls
lawls

Reputation: 1508

Loop through array of objects inside the class

I am having some trouble looping through an array with objects, inside the class. I wrote a little demo here so you can follow:

Tank tanks[] = new Tank[2];
tanks[0] = new Tank();
tanks[1] = new Tank();
tanks[0].doStuff(tanks);

doStuff(Tank[] tanks) {
    for (int i = 0; i < tanks.length; i++) {
        if (tanks[i].equals(this)) continue;
        // Do stuff
    }
}

So, I have an array with the type Tank. Then I call the method doStuff inside the Tank class. The method takes the array and loops through it. And then I want to do stuff to every tank that is not the current instance of the class. I hope you can make sense out of my code and this description.

The problem is that I get nullPointerException for if (tanks[i].equals(this))

What am I doing wrong here?

Upvotes: 0

Views: 102

Answers (3)

durron597
durron597

Reputation: 32333

When I run this code:

public class Tank {
  public static void main(String[] args) {
    Tank tanks[] = new Tank[2];
    tanks[0] = new Tank();
    tanks[1] = new Tank();
    tanks[0].doStuff(tanks);
  }

  public void doStuff(Tank[] tanks) {
      for (int i = 0; i < tanks.length; i++) {
          if (tanks[i].equals(this)) continue;
          // Do stuff
      }
  }
}

No error happens. Therefore, you've probably overridden .equals, and that is where the NullPointerException is occurring. The other possibility is that your simple example doesn't accurately reflect where your bug is occurring.

Upvotes: 1

Simulant
Simulant

Reputation: 20122

if you want to compare the IDs of your object you can use == instead of .equals()

doStuff(Tank tanks) {
  for (int i = 0; i < tanks.length; i++) {
    if (tanks[i] == this) {
        continue;
      }
    // Do stuff
  }
}

Upvotes: 1

SLaks
SLaks

Reputation: 887777

That means that tanks[i] is null. (or that your overridden equals() method has a bug)

You need to check for that.

Upvotes: 8

Related Questions