FAQs on the exercise Nested Conditional Statements
There are currently no frequently asked questions associated with this exercise – that’s where you come in! You can contribute to this section by offering your own questions, answers, or clarifications on this exercise. Ask or answer a question by clicking reply () below.
If you’ve had an “aha” moment about the concepts, formatting, syntax, or anything else with this exercise, consider sharing those insights! Teaching others and answering their questions is one of the best ways to learn and stay sharp.
Join the Discussion. Help a fellow learner on their journey.
Ask or answer a question about this exercise by clicking reply () below!
You can also find further discussion and get answers to your questions over in Language Help.
Agree with a comment or answer? Like () to up-vote the contribution!
I’m brand new to coding and i’m just learning the ropes.
I wish for someone to kind of clear the air here on an issue i found within the lesson: Nested Conditional Statements.
Now, first of all, im not too sure if this is an actually error/human mistake or if there is an underlying reason why this is the way it is, so if someone can shed some light on this, it would be much appreciated!!
Im attaching a screenshot of the issue i have found to show what i believe to be is an issue.
The issue in question is that your telling us to return the value as .85, WITHOUT the zero.
i have completed this lesson and it requires you to add a zero in the front, and return the value as 0.85.
On previous lessons, as you can see in the screenshot near the bottom of OUR code, you asked us to return the value as .50 and not 0.50…
This is just a minor error in the instructions. 0.85 and .85 are the same in terms of their numerical value. Your solution is correct. You can’t return a float without the zero at the beginning if the value is between -1 and 1. If you’d like to report this, you can report it through the Get Unstuck button in the bottom right corner or submit a bug report in the Community:Bug Reporting category on the forums.
Order book = new Order(true, 9.99, "Express", "ship50");
Order chemistrySet = new Order(false, 72.50, "Regular", "freeShipping");
book.ship();
chemistrySet.ship();
In the first line of the above code, we are creating an instance book of the Order class. Since 9.99 is less than 24, so the string "High value item!" is NOT printed by the constructor.
Then the second line of the above is executed which creates an instance chemistrySet of the Order class. The string "High value item!" is printed by the constructor. This is what you are seeing on the screen.
The third line of code calls the ship method on the book instance. This results in the strings "Shipping" and "Shipping cost: 0.85" being printed.
The fourth line calls the ship method on the chemistrySet instance. This results in the string "Order not ready" being printed.
The final output being:
“High value item!” (because of line 2)
“Shipping” (because of line 3)
“Shipping cost: 0.85” (because of line 3)
“Order not ready” (because of line 4)
The code that is shown doesn’t specify the condition in the conditional statement in the ship() method. All it shows is if (isFilled) then… but how does the computer know which way to go if isFilled was never defined as true or false? I tried finding answers on my own but all I found was basically: “The default value for a boolean is false, but in this case, since you pass the value in the constructor, it is using whatever value you provide.” Now I thought, if that was the case, then the if statement will be passed regardless whether the value of this boolean was true or false because it was never specified or given a value before; that or an error, but it does not when I run the code. Here is my answer to the problem: public class Order {
boolean isFilled;
double billAmount;
String shipping;
String couponCode;
public void ship() {
if (isFilled) {
System.out.println(“Shipping”);
System.out.println("Shipping cost: " + calculateShipping());
} else {
System.out.println(“Order not ready”);
}
}
public double calculateShipping() {
if (shipping.equals(“Regular”)) {
return 0;
} else if (shipping.equals(“Express”)) {
if(couponCode.equals(“ship50”)){
return 0.85;
} else {
return 1.75;
}
// Add your code here
} else {
return .50;
}
}
public static void main(String[] args) {
// do not alter the main method!
Order book = new Order(true, 9.99, “Express”, “ship50”);
Order chemistrySet = new Order(false, 72.50, “Regular”, “freeShipping”);
book.ship();
chemistrySet.ship();
}
}
And here is what I got:
High value item!
Shipping
Shipping cost: 0.85
Order not ready
I know that the “High value item!” is from the constructor method so im not worried about that. The number in “Shipping cost” is from book.ship() and “Order not ready” is from chemistrySet.ship(). Why is it that the if statement is passed from ship() when it takes true from the object “book” and the else statement is passed when it takes false from the object “chemistrySet”?
if (isFilled) { ...
// is shorthand for
if (isFilled == true) { ...
The body of an if statement will be executed if the expression within the parentheses evaluates to true.
// Suppose isFilled is true.
// Then
if (isFilled) { ... // will evaluate to
if (true) { ...
// Similarly
if (isFilled == true) { ... // will evaluate to
if (true == true) { ...
if (true) { ...
// Therefore,
if (isFilled) { ...
// is equivalent to
if (isFilled == true) { ...
For Example,
boolean x = true;
boolean y = false;
if (x == true) {
System.out.println("Printing #1");
}
if (x) {
System.out.println("Printing #2");
}
if (y) {
System.out.println("Printing #3");
}
// OUTPUT:
// "Printing #1"
// "Printing #2"
// "Printing #3" is not printed because
// if (y) { ... is evaluated as:
// if (false) { ...
// Since condition in parenthesis evaluates to false, so the body
// of the if statement is skipped.
I didnt realize that the lesson was already trying to teach me this. After looking back and trying to understand it from an experienced friend, the body of the if statement will run if true by default, and the body of the else statement will run if false. Its just its default. However, I believe if you wanted the body of the if statement to run when false, that can happen if you specify the conditional: if(variable==false){then…}