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 Harnessing the Power of Objects Handling Exceptions

Wan Nor Adzahari Wan Tajuddin
Wan Nor Adzahari Wan Tajuddin
2,438 Points

Why it doesn't work with System.out.printf ?

My code here won't pass. It is because I used System.out.printf instead of System.out.println. So what I want to know, why it only works with println but not with printf ?

Example.java
class Example {

  public static void main(String[] args) {
    GoKart kart = new GoKart("purple");
    if (kart.isBatteryEmpty()) {
      System.out.println("The battery is empty");
    }
    try {
      kart.drive(42);
    } catch (IllegalArgumentException iae) {
        System.out.printf("I'm sorry, %s", \\I should have have used System.out.println
                          iae.getMessage);
      }
  }

}
GoKart.java
class GoKart {
  public static final int MAX_BARS = 8;
  private int barCount;
  private String color;
  private int lapsDriven;

  public GoKart(String color) {
    this.color = color;
  }

  public String getColor() {
    return color;
  }

  public void charge() {
    barCount = MAX_BARS;
  }

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

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

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

  public void drive(int laps) {
    if (laps > barCount) {
      throw new IllegalArgumentException("Not enough battery remains");
    }
    lapsDriven += laps;
    barCount -= laps;
  }

}
Joshua Mclendon
Joshua Mclendon
46,708 Points

Because,

System.out.printf("I'm sorry, %s", iae.getMessage);

Should be

System.out.printf("I'm sorry, %s", iae.getMessage());

You forgot the parenthesis in getMessage(). getMessage() is a method that returns your message so methods require () when called by dot notation.

2 Answers

andren
andren
28,558 Points

It is because I used System.out.printf instead of System.out.println.

Actually that is incorrect, it has nothing to do with printf vs println. The issue is that you have forgotten to add parenthesis to the iae.getMessage method. If you add them like this:

class Example {

  public static void main(String[] args) {
    GoKart kart = new GoKart("purple");
    if (kart.isBatteryEmpty()) {
      System.out.println("The battery is empty");
    }
    try {
      kart.drive(42);
    } catch (IllegalArgumentException iae) {
        System.out.printf("I'm sorry, %s",
                          iae.getMessage());
      }
  }

}

Then your code will work fine.

Manas Vijaywargiya
Manas Vijaywargiya
12,598 Points

The answer is simple- u should use parenthesis after iae.getMessage()

class Example {

public static void main(String[] args) { GoKart kart = new GoKart("purple"); if (kart.isBatteryEmpty()) { System.out.println("The battery is empty"); } try { kart.drive(42); } catch (IllegalArgumentException iae) { System.out.printf("I'm sorry, %s", iae.getMessage()); } }

}