Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

Java Java Objects (Retired) Harnessing the Power of Objects Throwing Exceptions

James Mackey
PLUS
James Mackey
Courses Plus Student 994 Points

Says drive is already defined?

line 37

GoKart.java
public class GoKart {
  public static final int MAX_BARS = 8;
  private String mColor;
  private int mBarsCount;

  public GoKart(String color) {
    mColor = color;
    mBarsCount = 0;
  }

  public String getColor() {
    return mColor;
  }

  public void drive() {
    drive(1);
  }

  public void drive(int laps) {
    // Other driving code omitted for clarity purposes
    mBarsCount -= laps;
  }

  public void charge() {
    while (!isFullyCharged()) {
      mBarsCount++;
    }
  }

  public boolean isBatteryEmpty() {
    return mBarsCount == 0;
  }

  public boolean isFullyCharged() {
    return mBarsCount == MAX_BARS;
  }
public void drive(int lapAmount) {
  int newAmount = mBarsCount + lapAmount;
  if (newAmount > MAX_BARS) {
    throw new IllegalArguementException("Not enough battery remains");
  }
  mBarsCount = newAmount;
}
}

3 Answers

Simon Coates
Simon Coates
28,694 Points

can have multiple methods with the same name, but they have to have different signatures, so that java knows which one you mean. You have two methods called drive that accept an int. It has no means to differentiating. You have at least one other mistake. IllegalArgumentException

James Mackey
James Mackey
Courses Plus Student 994 Points

Have I not differentiated drive with int(lapAmount)??

Simon Coates
Simon Coates
28,694 Points

no. the signature has to be unique enough for java to know which method you mean on the basis of name and the number/type of parameters. As you have two drive methods that accept a single int, it has no method of knowing which one you want.

James Mackey
PLUS
James Mackey
Courses Plus Student 994 Points

public void drive(int laps) { if (mBarsCount - laps < 0) {

  throw new IllegalArgumentException("Not enough battery remains");
} else {
  mBarsCount -= laps;

} } } I have tried to differentiate and change my methods. Im now here. I know I hav the same problem. Im stuck and hav no idea how to fix it

Simon Coates
Simon Coates
28,694 Points

i pass that challenge with:

public class GoKart {
  public static final int MAX_BARS = 8;
  private String mColor;
  private int mBarsCount;

  public GoKart(String color) {
    mColor = color;
    mBarsCount = 0;
  }

  public String getColor() {
    return mColor;
  }

  public void drive() {
    drive(1);
  }

  public void drive(int laps) {
    if (mBarsCount - laps < 0) {

      throw new IllegalArgumentException("Not enough battery remains");
    }
    mBarsCount -= laps;
  }

  public void charge() {
    while (!isFullyCharged()) {
      mBarsCount++;
    }
  }

  public boolean isBatteryEmpty() {
    return mBarsCount == 0;
  }

  public boolean isFullyCharged() {
    return mBarsCount == MAX_BARS;
  }

}