Nested if
statements are paths inside of paths.
Nested If Statements
If a certain situation occurs, check for the next situation.
If a certain condition is met, it goes inside the if
block and is immediately faced with yet another if
statement. Let's look at an example where this might be needed.
To qualify for a loan there are two conditions that must be met. The person must make at least $30,000 and they must have also been at their job for 2 or more years.
Let's code this. I’m going to make a new class in chapter3
package called LoanQualifier
.
I paste our instructions as comments
package chapter3;
import java.util.Scanner;
/*
* NESTED IFS:
* To qualify for a loan, a person must make at least $30,000
* and have been working at their current job for at least 2 years.
*/
public class LoanQualifier {
}
Then create our main method.
public class LoanQualifier {
public static void main(String args[]){
}
}
Let's think through our design and add the steps as comments.
So first we are going to initialize what we know. Get what we don't. Make decision.
public static void main(String args[]){
//Initialize what we know
//Get what we don't
//Make decision
}
All right. So, what do we know? Well, we know that the required salary is $30,000 and we also know that they have to be there for 2 years or more.
Let's go ahead and add statements for these.
Both variables are integers so we can define their data type as int
.
public static void main(String args[]){
//Initialize what we know
int requiredSalary = 30000;
int requiredYearsEmployed = 2;
//Get what we don't
//Make decision
}
So that's what we do know. Now let's get what we don't know.
What don't we know?
We don't know how much they make, nor do we know how many years they've been on their job so we need to get both of those.
Let's first ask them about their salary.
public static void main(String args[]){
//Initialize what we know
int requiredSalary = 30000;
int requiredYearsEmployed = 2;
//Get what we don't
System.out.println("Enter your salary:");
//Make decision
}
Now we want to read this answer. We're going to use a variable for salary. What should the data type be?
Well we could use int
because that's what we used for requiredSalary
since it didn’t have decimal numbers. But what if their salary is something with decimal numbers? We want to be able to account for that.
So we'll use the double
data type. And if they happen to input a number with no decimals that's okay. The double
can still hold integer numbers as well. So, this covers both cases.
public static void main(String args[]){
//Initialize what we know
int requiredSalary = 30000;
int requiredYearsEmployed = 2;
//Get what we don't
System.out.println("Enter your salary:");
Scanner scanner = new Scanner(System.in);
double salary = scanner.nextDouble();
//Make decision
}
Now, we need to get the next part which is how many years have they worked at their job.
We'll prompt them again, then input a value for the years. The years can also be a double
if they worked like 2.5 years, for example.
public static void main(String args[]){
//Initialize what we know
int requiredSalary = 30000;
int requiredYearsEmployed = 2;
//Get what we don't
System.out.println("Enter your salary:");
Scanner scanner = new Scanner(System.in);
double salary = scanner.nextDouble();
System.out.println("Enter the number of years with your current employer:");
double years = scanner.nextDouble();
scanner.close();
//Make decision
}
Now it's time to make the decision.
What we have here is not an if-else like we saw before and it's not as simple as just using two standalone ifs. What we need in this case is a way to make sure that both of these conditions were met. One way that we can do this is with the nested ifs.
So, we can check for the first condition. Let's do that.
//Make decision
if(salary >= requiredSalary){
}
We're not ready to do anything else because we have to check the next condition, which is have they been on their job for at least 2 years. So we can place the second if block inside of the first one. This is considered nested ifs. If the first condition is true, you are immediately faced with the next if
and then we can make a decision
if(salary >= requiredSalary){
if(years >= requiredYearsEmployed){
}
}
If we’ve arrived inside of the inner if block then we know both conditions were true and therefore the requirement is met.
if(salary >= requiredSalary){
if(years >= requiredYearsEmployed){
System.out.println("Congrats! You qualify for the loan");
}
}
Now, I'm going to add an else
statement.
if(salary >= requiredSalary){
if(years >= requiredYearsEmployed){
System.out.println("Congrats! You qualify for the loan");
}
else{
}
}
This else
statement goes with the 2nd if
statement. Even though there's two if
statements here, the else will go with the immediate if
that it follows.
So, if we find ourselves inside of this else
it means that the condition, years >= requiredYearsEmployed
, was false. But it also means that the condition, salary >= requiredSalary
is true because if we look at our curly braces, we are still inside of the first if
statement meaning that it was true.
So, we know if we get to this else
statement, that they met the required salary but were lacking the years.
if(salary >= requiredSalary){
if(years >= requiredYearsEmployed){
System.out.println("Congrats! You qualify for the loan");
}
else{
System.out.println("Sorry, you must have worked at your current job "
+ requiredYearsEmployed + " years.");
}
}
Notice with the else
statement, it spans two lines here. That’s because I was running out of space in the editor. To make things readable you can always go to the next line. Just use the semicolon when the statement is complete.
Reminder: Using Variables
Notice I filled in the variable requiredYearsEmployed
in the else
block. I could've just hard coded the number 2 in. But, the whole purpose of using the variables is so that if I ever wanted to update this program (e.g. change the required years to 1 year), I wouldn't have to go searching all through the program, I could just do it in one place. So we'll use our variable.
Let’s add an outer else statement
I'm going to come outside of the _if
_statements. I want to add an else
for the first if
statement. You want to make sure the indentations line up as well so that it's really easy to read.
If we come to this point that means that the salary was not what it needed to be. So, we can print something to that effect.
if(salary >= requiredSalary){
if(years >= requiredYearsEmployed){
System.out.println("Congrats! You qualify for the loan");
}
else{
System.out.println("Sorry, you must have worked at your current job "
+ requiredYearsEmployed + " years.");
}
}
else{
System.out.println("Sorry, you must earn at least $"
+ requiredSalary + " to qualify for the loan");
}
All right. So, there is our whole program.
package chapter3;
import java.util.Scanner;
/*
* NESTED IFS:
* To qualify for a loan, a person must make at least $30,000
* and have been working at their current job for at least 2 years.
*/
public class LoanQualifier {
public static void main(String args[]){
//Initialize what we know
int requiredSalary = 30000;
int requiredYearsEmployed = 2;
//Get what we don't
System.out.println("Enter your salary:");
Scanner scanner = new Scanner(System.in);
double salary = scanner.nextDouble();
System.out.println("Enter the number of years with your current employer:");
double years = scanner.nextDouble();
scanner.close();
//Make decision
if(salary >= requiredSalary){
if(years >= requiredYearsEmployed){
System.out.println("Congrats! You qualify for the loan");
}
else{
System.out.println("Sorry, you must have worked at your current job "
+ requiredYearsEmployed + " years.");
}
}
else{
System.out.println("Sorry, you must earn at least $"
+ requiredSalary + " to qualify for the loan");
}
}
}
Let's run it.
We enter 25000 for the salary and 2 for the years. The output is
Sorry, you must earn at least $30000 to qualify for the loan
So, we know since the first condition was not met, it went into the outer else
statement.
Okay. So, let's run this again where we qualify for the loan. We enter 30000 for the salary and 2 for the years. Output is
Congrats! You qualify for the loan
Let's go greater. Let's say $35000. And 3 years. Okay. Great.
Congrats! You qualify for the loan
And you see we can exercise this in many different ways. Let’s do the salary (30000) but not the years (1.5)
Sorry, you must have worked at your current job 2 years
So that is the nested ifs.