FAQ: Conditionals and Control Flow - Nested Conditional Statements

This community-built FAQ covers the “Nested Conditional Statements” exercise from the lesson “Conditionals and Control Flow”.

Paths and Courses
This exercise can be found in the following Codecademy content:

Build Basic Android Apps with Java

Learn Java

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 (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 (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 (like) to up-vote the contribution!

Need broader help or resources? Head to Language Help and Tips and Resources. If you are wanting feedback or inspiration for a project, check out Projects.

Looking for motivation to keep learning? Join our wider discussions in Community

Learn more about how to use this guide.

Found a bug? Report it online, or post in Bug Reporting

Have a question about your account or billing? Reach out to our customer support team!

None of the above? Find out where to ask other questions here!

Hey there!

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…

Thanks for your feedback.

1 Like

Welcome to the forums!

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.

1 Like

Gotcha! Thanks for clearing that up. Your the best!! :smile:

1 Like

Does anyone know why “High value item!” is still displayed even though the cost of the book is 9.99 which is not > 24? Thanks for any help!

In main, we have:

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)

1 Like

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 Order(boolean filled, double cost, String shippingMethod, String coupon) {
if (cost > 24.00) {
System.out.println(“High value item!”);
}
isFilled = filled;
billAmount = cost;
shipping = shippingMethod;
couponCode = coupon;
}

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…}