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 trialAjay Shah
Courses Plus Student 1,822 Pointshelp me with this problem.
I am not getting this.
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 ch : discountCode.toCharArray()){
if( ! Character.isLetter(ch) || ch != '$'){
throw new IllegalArgumentException("Invalid discount code");
}
}
discountCode = discountCode.toUpperCase();
return discountCode;
}
}
public class Example {
public static void main(String[] args) {
// This is here just for example use cases.
Order order = new Order(
"Yoda PEZ Dispenser",
600);
// These are valid. They are letters and the $ character only
order.applyDiscountCode("abc");
order.getDiscountCode(); // ABC
order.applyDiscountCode("$ale");
order.getDiscountCode(); // $ALE
try {
// This will throw an exception because it contains numbers
order.applyDiscountCode("ABC123");
} catch (IllegalArgumentException iae) {
System.out.println(iae.getMessage()); // Prints "Invalid discount code"
}
try {
// This will throw as well, because it contains a symbol.
order.applyDiscountCode("w@w");
}catch (IllegalArgumentException iae) {
System.out.println(iae.getMessage()); // Prints "Invalid discount code"
}
}
}
1 Answer
Steven Parker
231,275 PointsYou've got the right idea, but to check if two things are not true, you would combine the expressions with AND instead of OR:
if ( !Character.isLetter(ch) && ch != '$' ) {
You could also test if either condition is true (using OR), and then negate the result:
if ( !(Character.isLetter(ch) || ch == '$') ) {
Ajay Shah
Courses Plus Student 1,822 PointsAjay Shah
Courses Plus Student 1,822 PointsIt,s still not working.
Steven Parker
231,275 PointsSteven Parker
231,275 PointsBoth of those work for me if a paste your code into the challenge and then replace that line with one of them. Maybe you accidentally changed something else? If you still have trouble, you may need to repost the entire code.