Java Java Objects Delivering the MVP Applying a Discount Code

Jonas Støvring
Jonas Støvring
4,576 Points

what am i doing wrong here :O

Can anyone tell me what i am doing wrong here
public class Order {
  private String itemName;
  private int priceInCents;
  private String discountCode;

  public Order(String itemName, int priceInCents) {
    this.itemName = itemName;
    this.priceInCents = priceInCents;

  public String getItemName() {
    return itemName;

  public int getPriceInCents() {
    return priceInCents;

  public String getDiscountCode() {
    return discountCode;

  public void applyDiscountCode(String discountCode) {
    this.discountCode = normalizeDiscountCode(discountCode);

private String normalizeDiscountCode(String discountCode){
        for(char c : discountCode.toCharArray()) {
            if(!Character.isLetter(c) && c != '$') {
                throw new IllegalArgumentException("invalid discount code.");

        return discountCode.toUpperCase();

public class Example {

  public static void main(String[] args) {
    // This is here just for example use cases.

    Order order = new Order(
            "Yoda PEZ Dispenser",

    // These are valid.  They are letters and the $ character only
    order.getDiscountCode(); // ABC

    order.getDiscountCode(); // $ALE

    try {
      // This will throw an exception because it contains numbers
    } catch (IllegalArgumentException iae) {
      System.out.println(iae.getMessage());  // Prints "Invalid discount code"
    try {
      // This will throw as well, because it contains a symbol.
    }catch (IllegalArgumentException iae) {
      System.out.println(iae.getMessage());  // Prints "Invalid discount code"


1 Answer

I'm not sure why this doesn't work, but posting your error message would probably help somebody figure it out.

When I solved this I didn't use the enhanced for loop, but used a regular one so i could explicitly loop over discountCode (int i = 0; i < discountCode.length; i++) and used charAt(i) to grab each character.