# Subgoals

## Section4.4Worked Example: Write Selection Statements

### Subgoals for Writing Selection Statements.

If Statement
1. Define how many mutually exclusive paths are needed
2. Order from most restrictive/selective group to least restrictive
3. Write if statement with Boolean expression
4. Follow with true bracket including action
6. Repeat until all groups and actions are accounted for
OR Switch Statement
1. Determine variable / expression for mutually exclusive ranges
2. Write switch statement based on variable / expression
3. Each range is a ‘case’
4. Include break statements and default case if needed
You can watch this video or read through the content below it.
Problem: Write the Java selection statements to solve the following specifications:
If integer variable currentNumber is odd, change its value so that it is now 4 times currentNumber plus 1; otherwise change its value so that it is now half of currentNumber (rounded down when currentNumber is odd).

### Subsection4.4.1SG1: Define how many mutually exclusive paths are needed

In this case, the problem says to do one action if variable is odd, and a different action otherwise.
Integer variable can only be odd or even, so there are 2 mutually exclusive paths. An if statement is best approach

### Subsection4.4.2SG2: Order from most restrictive/selective group to least restrictive

Since there are only 2 branches, order should not matter

### Subsection4.4.3SG3: Write if statement with Boolean expression

To determine if currentNumber is odd, we can check the remainder after dividing by 2 (modulo): if (currentNumber % 2 == 1)

### Subsection4.4.4SG4: Follow with true bracket including action

In the true branch, change value to 4 times + 1
if (currentNumber % 2 == 1)
{
currentNumber = currentNumber * 4 + 1;
}


### Subsection4.4.5SG5 : Follow with else bracket

In the else branch, change value to half current value. Note that integer division automatically truncates i.e. rounds down.
if (currentNumber % 2 == 1)
{
currentNumber = currentNumber * 4 + 1;
}
else
{
currenNumber /= 2;
}


### Subsection4.4.6SG6: Repeat until all groups and actions are accounted for

Not used – only two branches

### Subsection4.4.7Equivalent solution using the other ordering of the range/case groups.

if (currentNumber % 2 == 0)
{
currentNumber /= 2;
}
else
{
currentNumber = currentNumber * 4 + 1;
}