Control Structures

From CompSciWiki
Revision as of 15:02, 4 March 2007 by Umheurin (Talk | contribs)

Jump to: navigation, search

Control Structures are blocks of code that force the computer to make a decision. Sometimes you will want your program to perform different tasks depending on certain boolean conditions. For example if you were writing a game you would probably find it very useful to be able to know when the user has won the game so that you could show a high scores page.

Without control structures programs would begin at the first line and excecute every line of code in order, giving the same output every time. Imagine how boring Tetris would be if there was only one piece! Control structures allow you to change the order of execution, jumping from one section of code to another as needed.


The If-Statement

A First Example

In this example the user is asked for a number and the program tells the user if the number is even. Pay careful attention to lines 05 to 08.

00 public static void main(String[] args)
01 {
02     int number;
03     number = Integer.parseInt(JOptionPane.showInputDialog(null,"Enter a number"));
04
05     if(number%2 == 0)
06     {
07         System.out.println("The number is even");
08     }//if
09
10 }//main

The keyword if is used to tell the computer to make a decision based on a condition. If the condition returns a value of true then the lines of code contained inside the body is executed. If the condition returns false the code inside the body is skipped entirely.

In this example the condition is number%2 == 0. You can always identify the condition of an if-statement by looking at what is contained in the parentheses after the word if. The condition must always return either true or false. Any other values (such as a number, string, or character) will result in an error when you try to compile your program.

The body of the if-statement is everything contained within the curled braces. In this case the body contains one line: System.out.println("The number is even");.

Together the keyword if, the condition, and the body form what is called an if block or if statement.


Anatomy of the If-Statement

As described in the previous example an if-statement is made up of several parts:

  • the keyword if
  • the condition
  • the body

The general form for the if-statement is:

if (condition)    //"if" and condition on same line, condition is contained inside parentheses
{
    body          //all statements that should be executed if and only if the condition returns a value of true
}//if


The If-Else Statement

Sometimes it is not sufficient to simply tell the computer "If such-and-such condition is true do this". Somtimes you will want to say "If such-and-such is true do this, otherwise do that". A simple way of doing this would be to have a separate if-statement that will return the opposite value of the first:

if (number%2 == 0)
{
    System.out.println("The number is even");
}//if

if (number%2 !=0)
{
    System.out.println("The number is odd");
}//if

While this approach works, it is needlessly complicated; there is a better way of doing the same task, but with less work. The keyword else can be used to tell the computer do execute a different body of code if the condition of an if-statement returns false. We can rewrite the code from above to take advantage of this keyword like this:

if (number%2 == 0)
{
    System.out.println("The number is even");
}//if

else
{
    System.out.println("The number is odd");
}//else

If we step through this last example the computer will evaluate the condition number%2 == 0 and check the result. If the result is true the body of the if-statement will be executed, just like in the previous examples. If the result is false then the body of the else-statement is executed.

The keyword else and the corresponding body form what is called an else-block or else-statement. It is very important to note that an else-block is always associated with an if-block, and each if-block can only ever be associated with zero or one else-blocks.

Together the keywords if, else, the condition, and the two bodies form a code-block known as an if-else block or if-else statement.


Anatomy of the If-Else Statement

The if-else statement is made up of the following parts:

  • the keyword if
  • the condition
  • the body of the if-statement
  • the keyword else
  • the body of the else-statement

The general form of an if-else statement is:

if (condition)
{
    code to execute if condition == true
}

else
{
    code to execute if condition == false
}


Conditions

Logical and Relative Operators

What happens if you have a statement the requires several conditions to be true before it will be executed? You could nest if statements, but this is messy are certainly not good practice. This is where logical operators come in. The snippet of code below is 100% valid, but is overly complicated.

if (x == 1)
{
  if (y == 1)
  {
    System.out.println("X is 1 and Y is 1");
  }
}

The next version will yield the same result. Also, it shows how logical operators can clean up code.

if (x == 1 && y == 1)
{
  System.out.println("X is 1 and Y is 1");
}

There are three logical operators used for conditional statements. They are AND, OR, and NOT. The AND is represented in code as &&. The OR is represented as ||. Lastly, the NOT is represented as !. The purpose of these operators is to combine the boolean values of all the conditions and come up with a single boolean value.

Relational operators are nothing new. You have seen and been using them and probably did not realize it. Relational operators are part of what makes up a conditional statement. They will determine whether a condition will be true or false. Below is a list of the different relational operators.

Operator  True if...
  >       Left operand is greater than right operand
  >=      Left operand is greater than or equal to right operand

  <       Left operand is less than right operand
  <=      Left operand is less than or equal to right operand

  ==      Left operand is equal to right operand
  !=      Left operand is not equal to right operand

The operands are the numbers that are being compared.

Now that you know what logical and relative operators are, you can start to build more complex statements.

Comparing Strings

Strings are a very large subject so we will only touch the basics about comparing strings in this section. The first way to compare strings is by using the relational operators. The most common approach is to use the == to see if two strings are equal. Here is an example on how strings can be compared.

String str1 = "hello";
String str2 = "hello";

if (str1 == str2)
  System.out.println("The strings are equal");
else
  System.out.println("The strings are not equal");

The example above will print out "The strings are equal". It seems simple enough. However, when using the == to compare strings, it will compare by reference instead of by value. Another example will help demonstrate what this means.

String str1 = "hello";
String str2 = "he";
String str3 = "llo";
str2 = str2 + str3; // The value is now "hello".

if (str1 == str2)
  System.out.println("The strings are equal");
else
  System.out.println("The strings are not equal");

What will be the output of the code above? If you said "The strings are equal" because "hello" is equal to "hello" even though they are concatenated together, you are wrong. We will avoid explaining the details for now. All you need to know is that the values of the strings are NOT being compared. This will vary between every programming language. In C# you may compare by values or by references, while in Java you can compare references only.

There is a safer way to compare strings. The Java String API contains dozens of useful methods, but we will only look at one. The "equals" method is a great way to compare the values between two strings. Here is the same code as above using the "equals" method for comparison.

String str1 = "hello";
String str2 = "he";
String str3 = "llo";
str2 = str2 + str3; // The value is now "hello".

if (str1.equals(str2))
  System.out.println("The strings are equal");
else
  System.out.println("The strings are not equal");

This time the program will print out "The strings are equal".

Nesting

If-Else Ladders

A Second Example

The following program asks the user for two sports scores and tells the user which team won or if the game was a draw. The key components to pay attention to are lines 07 to 14.

00 public static void main(String[] args)
01 {
02    int scoreA, scoreB;
03    
04    scoreA = Integer.parseInt(JOptionPane.showInputDialog(null,"Enter Team A's score"));
05    scoreB = Integer.parseInt(JOptionPane.showInputDialog(null,"Enter Team B's score"));
06
07    if(scoreA > scoreB)
08    {
09        System.out.println("Team A won");
10    }//if
11
12    else if(scoreA < scoreB)
13    {
14        System.out.println("Team B won");
15    }//else if
16
17    else
18    {
19        System.out.println("The game was a draw");
20    }//else
21 }//main


Review Questions and Exercises

Template loop detected: Template loop detected: