|
To execute this expression, the compiler first
examines the Condition. If the Condition is true, then it
executes the Statement. After executing the Statement, the Condition is
checked again. AS LONG AS the Condition is true, it will keep
executing the Statement. When or once the Condition
becomes false, it exits the loop:

Here is an example:
using System;
public class Exercise
{
public static int Main()
{
var Stories = 0;
while( Stories <= 4 )
{
Console.WriteLine("Number {0}", Stories);
Stories++;
}
Console.WriteLine();
return 0;
}
}
This would produce:
Number 0
Number 1
Number 2
Number 3
Number 4
Press any key to continue . . .
To effectively execute a while condition, you
should make sure you provide a mechanism for the compiler to use or get a
reference value for the condition, variable, or expression being
checked. This is sometimes in the form of a variable being initialized
although it could be some other expression. Such a while
condition could be illustrated as follows:

|
do This
while a Condition is True
|
|
The while loop is used first check a
condition and then execute a statement. If the condition is false, the
statement would never execute. Consider the following program:
using System;
public class Exercise
{
public static int Main()
{
var Stories = 5;
while (Stories <= 4)
{
Console.WriteLine("Number {0}", Stories);
Stories++;
}
Console.WriteLine();
return 0;
}
}
When this program executes, nothing from the while
loop would execute because, as the condition is checked in the
beginning, it is false and the compiler would not get to the Statement.
In some cases, you may want to execute a statement before checking the
condition for the first time. This can be done using the do…while statement.
Its formula is:
do Statement while (Condition);
The do…while condition executes a Statement
first. After the first execution of the Statement, it examines
the Condition. If the Condition is true, then it executes
the Statement again. It will keep executing the Statement
AS LONG AS the Condition is true. Once the Condition
becomes false, the looping (the execution of the Statement) would
stop.
If the Statement is a short one, such as made
of one line, simply write it after the do keyword. Like the if
and the while statements, the Condition being checked must
be included between parentheses. The whole do…while statement
must end with a semicolon.

Another version of the counting program seen
previously would be:
using System;
public class Exercise
{
public static int Main()
{
var Stories = 0;
do
Console.WriteLine("Number {0}", Stories++);
while (Stories <= 4);
Console.WriteLine();
return 0;
}
}
This would produce:
Number 0
Number 1
Number 2
Number 3
Number 4
Press any key to continue . . .
If the Statement is long and should span more than
one line, start it with an opening curly bracket "{" and end it with a
closing curly bracket "}".
|
Practical
Learning: Introducing Counting and Looping |
|
- Start Microsoft Visual C#
- Create a new Console Application named FlowerShop3
- To create a new class, in the Class View, right-click the project name -> Add
-> Class...
- Set the Name of the class to Flower and click Add
- Complete the Flower.cs file as follows:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace FlowerShop3
{
public enum FlowerType
{
Roses = 1,
Lilies,
Daisies,
Carnations,
LivePlant,
Mixed
}
public enum FlowerColor
{
Red = 1,
White,
Yellow,
Pink,
Orange,
Blue,
Lavender,
Mixed
}
public enum FlowerArrangement
{
Bouquet = 1,
Vase,
Basket,
Any
}
class Flower
{
public FlowerType Type;
public FlowerColor Color;
public FlowerArrangement Arrangement;
public decimal UnitPrice;
public Flower()
{
Type = FlowerType.Mixed;
Color = FlowerColor.Mixed;
Arrangement = FlowerArrangement.Vase;
UnitPrice = 0.00M;
}
public Flower(FlowerType type)
{
Type = type;
Color = FlowerColor.Mixed;
Arrangement = FlowerArrangement.Vase;
UnitPrice = 0.00M;
}
public Flower(FlowerType type, FlowerColor color,
FlowerArrangement argn, decimal price)
{
Type = type;
Color = color;
Arrangement = argn;
UnitPrice = price;
}
}
}
|
- To create a new class, in the Solution Explorer, right-click the project
name, position the mouse on Add and click Class...
- Set the Name of the class to OrderProcessing and click Add
- Complete the OrderProcessing.cs file as follows:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace FlowerShop3
{
class OrderProcessing
{
public Flower FlowerOrder;
public int Quantity;
public OrderProcessing()
{
FlowerOrder = new Flower();
}
public decimal GetTotalPrice()
{
return Quantity * FlowerOrder.UnitPrice;
}
public void GetFlowerType()
{
int choice = 0;
do
{
Console.WriteLine("Enter the Type of Flower Order");
Console.WriteLine("1. Roses");
Console.WriteLine("2. Lilies");
Console.WriteLine("3. Daisies");
Console.WriteLine("4. Carnations");
Console.WriteLine("5. Live Plant");
Console.WriteLine("6. Mixed");
Console.Write("Your Choice: ");
choice = int.Parse(Console.ReadLine());
} while ((choice < 1) || (choice > 6));
switch (choice)
{
case 1:
FlowerOrder.Type = FlowerType.Roses;
break;
case 2:
FlowerOrder.Type = FlowerType.Lilies;
break;
case 3:
FlowerOrder.Type = FlowerType.Daisies;
break;
case 4:
FlowerOrder.Type = FlowerType.Carnations;
break;
case 5:
FlowerOrder.Type = FlowerType.LivePlant;
break;
default:
FlowerOrder.Type = FlowerType.Mixed;
break;
}
}
public void GetFlowerColor()
{
int choice = 0;
do
{
Console.WriteLine("Enter the Color");
Console.WriteLine("1. Red");
Console.WriteLine("2. White");
Console.WriteLine("3. Yellow");
Console.WriteLine("4. Pink");
Console.WriteLine("5. Orange");
Console.WriteLine("6. Blue");
Console.WriteLine("7. Lavender");
Console.WriteLine("8. Mixed");
Console.Write("Your Choice: ");
choice = int.Parse(Console.ReadLine());
} while ((choice < 1) || (choice > 8));
switch (choice)
{
case 1:
FlowerOrder.Color = FlowerColor.Red;
break;
case 2:
FlowerOrder.Color = FlowerColor.White;
break;
case 3:
FlowerOrder.Color = FlowerColor.Yellow;
break;
case 4:
FlowerOrder.Color = FlowerColor.Pink;
break;
case 5:
FlowerOrder.Color = FlowerColor.Yellow;
break;
case 6:
FlowerOrder.Color = FlowerColor.Blue;
break;
case 7:
FlowerOrder.Color = FlowerColor.Lavender;
break;
default:
FlowerOrder.Color = FlowerColor.Mixed;
break;
}
}
public void GetFlowerArrangement()
{
int choice = 0;
do
{
Console.WriteLine("Enter the Type of Arrangement");
Console.WriteLine("1. Bouquet");
Console.WriteLine("2. Vase");
Console.WriteLine("3. Basket");
Console.WriteLine("4. Mixed");
Console.Write("Your Choice: ");
choice = int.Parse(Console.ReadLine());
} while ((choice < 1) || (choice > 4));
switch (choice)
{
case 1:
FlowerOrder.Arrangement = FlowerArrangement.Bouquet;
break;
case 2:
FlowerOrder.Arrangement = FlowerArrangement.Vase;
break;
case 3:
FlowerOrder.Arrangement = FlowerArrangement.Basket;
break;
default:
FlowerOrder.Arrangement = FlowerArrangement.Any;
break;
}
}
public void ProcessOrder()
{
GetFlowerType();
GetFlowerColor();
GetFlowerArrangement();
Console.Write("Enter the Unit Price: ");
FlowerOrder.UnitPrice = decimal.Parse(Console.ReadLine());
Console.Write("Enter Quantity: ");
Quantity = int.Parse(Console.ReadLine());
}
public void ShowOrder()
{
Console.WriteLine("=======================");
Console.WriteLine("==-=-=Flower Shop=-=-==");
Console.WriteLine("-----------------------");
Console.WriteLine("Flower Type: {0}", FlowerOrder.Type);
Console.WriteLine("Flower Color: {0}", FlowerOrder.Color);
Console.WriteLine("Arrangement: {0}", FlowerOrder.Arrangement);
Console.WriteLine("Price: {0:C}", FlowerOrder.UnitPrice);
Console.WriteLine("Quantity: {0}", Quantity);
Console.WriteLine("Total Price: {0:C}", GetTotalPrice());
Console.WriteLine("=======================");
}
}
}
|
- Access the Program.cs file and complete it as follows:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace FlowerShop3
{
class Program
{
static void Main()
{
OrderProcessing order = new OrderProcessing();
order.ProcessOrder();
Console.WriteLine();
order.ShowOrder();
Console.WriteLine();
}
}
}
|
- Execute the application and test it. Here is an example:
Enter the Type of Flower Order
1. Roses
2. Lilies
3. Daisies
4. Carnations
5. Live Plant
6. Mixed
Your Choice: 8
Enter the Type of Flower Order
1. Roses
2. Lilies
3. Daisies
4. Carnations
5. Live Plant
6. Mixed
Your Choice: 2
Enter the Color
1. Red
2. White
3. Yellow
4. Pink
5. Orange
6. Blue
7. Lavender
8. Mixed
Your Choice: 9
Enter the Color
1. Red
2. White
3. Yellow
4. Pink
5. Orange
6. Blue
7. Lavender
8. Mixed
Your Choice: 0
Enter the Color
1. Red
2. White
3. Yellow
4. Pink
5. Orange
6. Blue
7. Lavender
8. Mixed
Your Choice: 7
Enter the Type of Arrangement
1. Bouquet
2. Vase
3. Basket
4. Mixed
Your Choice: 8
Enter the Type of Arrangement
1. Bouquet
2. Vase
3. Basket
4. Mixed
Your Choice: 5
Enter the Type of Arrangement
1. Bouquet
2. Vase
3. Basket
4. Mixed
Your Choice: 2
Enter the Unit Price: 42.85
Enter Quantity: 2
=======================
==-=-=Flower Shop=-=-==
-----------------------
Flower Type: Lilies
Flower Color: Lavender
Arrangement: Vase
Price: $42.85
Quantity: 2
Total Price: $85.70
=======================
Press any key to continue . . .
|
- Close the DOS window
The for statement is typically used to count
a number of items. At its regular structure, it is divided in three
parts. The first section specifies the starting point for the count. The
second section sets the counting limit. The last section determines the
counting frequency. The syntax of the for statement is:
for(Start; End; Frequency) Statement;
The Start expression is a variable assigned the
starting value. This could be Count = 0;
The End expression sets the criteria for ending the counting. An example
would be Count < 24; this means the counting would continue as long
as the Count variable is less than 24. When the count is about to rich
24, because in this case 24 is excluded, the counting would stop. To
include the counting limit, use the <= or >= comparison operators
depending on how you are counting.
The Frequency expression would let
the compiler know how many numbers to add or subtract before continuing
with the loop. This expression could be an increment operation such as
++Count.
Here is an example that applies the for statement:
using System;
public class Exercise
{
public static int Main()
{
for (var Stories = 0; Stories <= 4; Stories++)
Console.WriteLine("Number {0}", Stories);
Console.WriteLine();
return 0;
}
}
This would produce:
Number 1
Number 2
Number 3
Number 4
Press any key to continue . . .
|
Controlling the Conditional Statements |
|
|
Nesting a Conditional Statement
|
|
Consider the following program:
using System;
public class Exercise
{
public static int Main()
{
var TypeOfHome = 0;
do
{
Console.WriteLine("What Type of House Would you Like to Purchase?");
Console.WriteLine("1 - Single Family");
Console.WriteLine("2 - Town House");
Console.WriteLine("3 - Condominium");
Console.Write("Your Choice? ");
TypeOfHome = int.Parse(Console.ReadLine());
} while ((TypeOfHome < 1) || (TypeOfHome > 3));
if (TypeOfHome == 1)
Console.WriteLine("\nType of Home: Single Family");
else if (TypeOfHome == 2)
Console.WriteLine("\nType of Home: Town House");
else if (TypeOfHome == 3)
Console.WriteLine("\nType of Home: Condominium");
Console.WriteLine();
return 0;
}
}
This is used to request one of the numbers 1, 2, or
3 from the user. Any number below 1 or above 3 is not accepted. Here is
an example of running the program:
What Type of House Would you Like to Purchase?
1 - Single Family
2 - Town House
3 - Condominium
Your Choice? 8
What Type of House Would you Like to Purchase?
1 - Single Family
2 - Town House
3 - Condominium
Your Choice? 6
What Type of House Would you Like to Purchase?
1 - Single Family
2 - Town House
3 - Condominium
Your Choice? 3
Type of Home: Condominium
Press any key to continue . . .
If the user enters an invalid value, the question is
simply being asked again. It would be professional to let the user know
why the request came back even though what appears as a normal number
was entered. To solve this and other types of problems, you can write
one conditional statement inside of another. This is referred to as nesting.
To create a conditional statement inside of another, simply proceed as
we have done so far to create them. Here is an example:
using System;
public class Exercise
{
public static int Main()
{
var TypeOfHome = 0;
do
{
Console.WriteLine("What Type of House Would you Like to Purchase?");
Console.WriteLine("1 - Single Family");
Console.WriteLine("2 - Townhouse");
Console.WriteLine("3 - Condominium");
Console.Write("Your Choice? ");
TypeOfHome = int.Parse(Console.ReadLine());
if ((TypeOfHome < 1) || (TypeOfHome > 3))
Console.WriteLine("Invalid Choice: Please try again");
} while ((TypeOfHome < 1) || (TypeOfHome > 3));
if (TypeOfHome == 1)
Console.WriteLine("\nType of Home: Single Family");
else if (TypeOfHome == 2)
Console.WriteLine("\nType of Home: Townhouse");
else if (TypeOfHome == 3)
Console.WriteLine("\nType of Home: Condominium");
Console.WriteLine();
return 0;
}
}
Here is another example of running the program:
What Type of House Would you Like to Purchase?
1 - Single Family
2 - Town House
3 - Condominium
Your Choice? 0
Invalid Choice: Please try again
What Type of House Would you Like to Purchase?
1 - Single Family
2 - Town House
3 - Condominium
Your Choice? 6
Invalid Choice: Please try againe
What Type of House Would you Like to Purchase?
1 - Single Family
2 - Town House
3 - Condominium
Your Choice? 2
Type of Home: Town House
Press any key to continue . . .
|
Practical
Learning: Nesting Conditions |
|
- Access the OrderProcessing.cs file and change it as follows:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace FlowerShop3
{
class OrderProcessing
{
public Flower FlowerOrder;
public int Quantity;
public OrderProcessing()
{
FlowerOrder = new Flower();
}
public decimal GetTotalPrice()
{
return Quantity * FlowerOrder.UnitPrice;
}
public void GetFlowerType()
{
int choice = 0;
do
{
Console.WriteLine("Enter the Type of Flower Order");
Console.WriteLine("1. Roses");
Console.WriteLine("2. Lilies");
Console.WriteLine("3. Daisies");
Console.WriteLine("4. Carnations");
Console.WriteLine("5. Live Plant");
Console.WriteLine("6. Mixed");
Console.Write("Your Choice: ");
choice = int.Parse(Console.ReadLine());
if ((choice < 1) || (choice > 6))
Console.WriteLine(
"Invalid Value: Please enter a value between 1 and 6");
} while ((choice < 1) || (choice > 6));
switch (choice)
{
case 1:
FlowerOrder.Type = FlowerType.Roses;
break;
case 2:
FlowerOrder.Type = FlowerType.Lilies;
break;
case 3:
FlowerOrder.Type = FlowerType.Daisies;
break;
case 4:
FlowerOrder.Type = FlowerType.Carnations;
break;
case 5:
FlowerOrder.Type = FlowerType.LivePlant;
break;
default:
FlowerOrder.Type = FlowerType.Mixed;
break;
}
}
public void GetFlowerColor()
{
int choice = 0;
do
{
Console.WriteLine("Enter the Color");
Console.WriteLine("1. Red");
Console.WriteLine("2. White");
Console.WriteLine("3. Yellow");
Console.WriteLine("4. Pink");
Console.WriteLine("5. Orange");
Console.WriteLine("6. Blue");
Console.WriteLine("7. Lavender");
Console.WriteLine("8. Mixed");
Console.Write("Your Choice: ");
choice = int.Parse(Console.ReadLine());
if ((choice < 1) || (choice > 8))
Console.WriteLine(
"Invalid Value: Please enter a value between 1 and 8");
} while ((choice < 1) || (choice > 8));
switch (choice)
{
case 1:
FlowerOrder.Color = FlowerColor.Red;
break;
case 2:
FlowerOrder.Color = FlowerColor.White;
break;
case 3:
FlowerOrder.Color = FlowerColor.Yellow;
break;
case 4:
FlowerOrder.Color = FlowerColor.Pink;
break;
case 5:
FlowerOrder.Color = FlowerColor.Yellow;
break;
case 6:
FlowerOrder.Color = FlowerColor.Blue;
break;
case 7:
FlowerOrder.Color = FlowerColor.Lavender;
break;
default:
FlowerOrder.Color = FlowerColor.Mixed;
break;
}
}
public void GetFlowerArrangement()
{
int choice = 0;
do
{
Console.WriteLine("Enter the Type of Arrangement");
Console.WriteLine("1. Bouquet");
Console.WriteLine("2. Vase");
Console.WriteLine("3. Basket");
Console.WriteLine("4. Mixed");
Console.Write("Your Choice: ");
choice = int.Parse(Console.ReadLine());
if ((choice < 1) || (choice > 4))
Console.WriteLine(
"Invalid Value: Please enter a value between 1 and 4");
} while ((choice < 1) || (choice > 4));
switch (choice)
{
case 1:
FlowerOrder.Arrangement = FlowerArrangement.Bouquet;
break;
case 2:
FlowerOrder.Arrangement = FlowerArrangement.Vase;
break;
case 3:
FlowerOrder.Arrangement = FlowerArrangement.Basket;
break;
default:
FlowerOrder.Arrangement = FlowerArrangement.Any;
break;
}
}
public void ProcessOrder()
{
GetFlowerType();
GetFlowerColor();
GetFlowerArrangement();
Console.Write("Enter the Unit Price: ");
FlowerOrder.UnitPrice = decimal.Parse(Console.ReadLine());
Console.Write("Enter Quantity: ");
Quantity = int.Parse(Console.ReadLine());
}
public void ShowOrder()
{
Console.WriteLine("=======================");
Console.WriteLine("==-=-=Flower Shop=-=-==");
Console.WriteLine("-----------------------");
Console.WriteLine("Flower Type: {0}", FlowerOrder.Type);
Console.WriteLine("Flower Color: {0}", FlowerOrder.Color);
Console.WriteLine("Arrangement: {0}", FlowerOrder.Arrangement);
Console.WriteLine("Price: {0:C}", FlowerOrder.UnitPrice);
Console.WriteLine("Quantity: {0}", Quantity);
Console.WriteLine("Total Price: {0:C}", GetTotalPrice());
Console.WriteLine("=======================");
}
}
}
|
- Execute the application and test it. Here is an example:
Enter the Type of Flower Order
1. Roses
2. Lilies
3. Daisies
4. Carnations
5. Live Plant
6. Mixed
Your Choice: 8
Invalid Value: Please enter a value between 1 and 6
Enter the Type of Flower Order
1. Roses
2. Lilies
3. Daisies
4. Carnations
5. Live Plant
6. Mixed
Your Choice: 0
Invalid Value: Please enter a value between 1 and 6
Enter the Type of Flower Order
1. Roses
2. Lilies
3. Daisies
4. Carnations
5. Live Plant
6. Mixed
Your Choice: 4
Enter the Color
1. Red
2. White
3. Yellow
4. Pink
5. Orange
6. Blue
7. Lavender
8. Mixed
Your Choice: 9
Invalid Value: Please enter a value between 1 and 8
Enter the Color
1. Red
2. White
3. Yellow
4. Pink
5. Orange
6. Blue
7. Lavender
8. Mixed
Your Choice: 3
Enter the Type of Arrangement
1. Bouquet
2. Vase
3. Basket
4. Mixed
Your Choice: 9
Invalid Value: Please enter a value between 1 and 4
Enter the Type of Arrangement
1. Bouquet
2. Vase
3. Basket
4. Mixed
Your Choice: 5
Invalid Value: Please enter a value between 1 and 4
Enter the Type of Arrangement
1. Bouquet
2. Vase
3. Basket
4. Mixed
Your Choice: 3
Enter the Unit Price: 54.95
Enter Quantity: 1
=======================
==-=-=Flower Shop=-=-==
-----------------------
Flower Type: Carnations
Flower Color: Yellow
Arrangement: Basket
Price: $54.95
Quantity: 1
Total Price: $54.95
=======================
Press any key to continue . . .
|
- Close the DOS window
|
Breaking the Flow of a Conditional Statement
|
|
The break statement is used to stop a loop for any
reason or condition when necessary.
The formula of the break statement is:
break;
Although made of only one word, the break statement
is a complete statement; therefore, it can (and should always) stay on
its own line (this makes the program easy to read).
The break statement applies to the most previous
conditional statement to it; provided that previous statement is
applicable. The break
statement can be used in a while condition, in a
do…while or a for loops to stop an ongoing action. Here is
an example that is used to count the levels of a house from 1 to 12 but
it is asked to stop at 3:
using System;
public class Exercise
{
public static int Main()
{
for (var Stories = 1; Stories <= 12; Stories++)
{
Console.WriteLine("Story {0}", Stories);
if (Stories == 3)
break;
}
Console.WriteLine();
return 0;
}
}
This would produce:
Story 1
Story 2
Story 3
Press any key to continue . . .
|
Continuing a Conditional Statement
|
|
The continue statement uses the following
formula:
continue;
When processing a loop, if the statement finds a
false value, you can use the continue statement inside of a while,
a do…while or a for conditional statements to ignore the subsequent
statement or to jump from a false Boolean value to the subsequent valid
value, unlike the break statement that would exit the loop. Like the
break statement, the continue keyword applies to the most previous
conditional statement and should stay on its own line. Here is an
example when a program is supposed to count the levels of a house from 1
to 6:
using System;
public class Exercise
{
public static int Main()
{
for (var Stories = 1; Stories <= 6; Stories++)
{
if (Stories == 3)
continue;
Console.WriteLine("Story {0}", Stories);
}
Console.WriteLine();
return 0;
}
}
This would produce:
Story 1
Story 2
Story 4
Story 5
Story 6
Press any key to continue . . .
Notice that, when the compiler gets to 3, it ignores it.
|
Going to a Designated Label
|
|
The goto statement allows a program execution
to jump to another section of the function in which it is being used. In order to use the goto statement, insert a
name on a particular section of your function so you can refer to that
name. The name, also called a label, is made of one word and follows the
rules we have learned about C++ names (the name can be anything), then
followed by a colon. Here is an example where the program is supposed to
count the levels of a 14 story building:
using System;
public class Exercise
{
public static int Main()
{
for (var Stories = 1; Stories <= 14; Stories++)
{
if (Stories == 4)
goto CountUpTo3;
Console.WriteLine("Story {0}", Stories);
}
CountUpTo3:
Console.WriteLine("Our homes have only up to 3 levels\n");
return 0;
}
}
This would produce:
Story 1
Story 2
Story 3
Our homes have only up to 3 levels
Press any key to continue . . .
Some functions are meant to return a value that is
conditional of their processing. The fact that a function indicates the type of
value it would return may not be clear at the time the function is closed but a function defined other than
void must always
return a value. You can write a conditional statement, such as if,
inside of a function and return a value from that condition. Here is an example:
using System;
public class Program
{
enum HouseType { Unknown, SingleFamily, Townhouse, Condominium };
public static int Main()
{
var Type = GetHouseType();
switch (Type)
{
case HouseType.SingleFamily:
Console.WriteLine("\nType of Home: Single Family");
break;
case HouseType.Townhouse:
Console.WriteLine("\nType of Home: Townhouse");
break;
case HouseType.Condominium:
Console.WriteLine("\nType of Home: Condominium");
break;
case HouseType.Unknown:
Console.WriteLine("\nType of Home. Unknown");
break;
}
return 0;
}
private static HouseType GetHouseType()
{
var Type = 0;
Console.WriteLine("What Type of House Would you Like to Purchase?");
Console.WriteLine("1 - Single Family");
Console.WriteLine("2 - Townhouse");
Console.WriteLine("3 - Condominium");
Console.Write("Your Choice? ");
Type = int.Parse(Console.ReadLine());
if (Type == 1)
return HouseType.SingleFamily;
else if (Type == 2)
return HouseType.Townhouse;
else if (Type == 3)
return HouseType.Condominium;
}
}
This GetHouseType() method indicates when one of three
values is returned. In reality, this method could get a value other than the
three that are considered. If the user enters such a value, the current version
of the method would not know what to do. For this reason, the program will not
compile. In Microsoft Visual C#, you would receive the
following error: 'Program.GetHouseType()': not all code paths return a value
To solve this problem, you must provide a statement that
would include any value other than those considered. You can do this by writing
a final return that has its own value. Here is an example:
using System;
public class Program
{
enum HouseType { Unknown, SingleFamily, Townhouse, Condominium };
public static int Main()
{
var Type = GetHouseType();
switch (Type)
{
case HouseType.SingleFamily:
Console.WriteLine("\nType of Home: Single Family");
break;
case HouseType.Townhouse:
Console.WriteLine("\nType of Home: Townhouse");
break;
case HouseType.Condominium:
Console.WriteLine("\nType of Home: Condominium");
break;
case HouseType.Unknown:
Console.WriteLine("\nType of Home. Unknown");
break;
}
return 0;
}
private static HouseType GetHouseType()
{
var Type = 0;
Console.WriteLine("What Type of House Would you Like to Purchase?");
Console.WriteLine("1 - Single Family");
Console.WriteLine("2 - Townhouse");
Console.WriteLine("3 - Condominium");
Console.Write("Your Choice? ");
Type = int.Parse(Console.ReadLine());
if (Type == 1)
return HouseType.SingleFamily;
else if (Type == 2)
return HouseType.Townhouse;
else if (Type == 3)
return HouseType.Condominium;
else
return HouseType.Unknown;
}
}
Imagine that you want to count the positive odd numbers from
a certain maximum to a certain minimum. For example, to count the odd numbers
from 1 to 9, you would use:
9, 7, 5, 3, and 1
Notice that, to perform this operation, you consider the
highest. Then you subtract 2 to get the previous. Again, you subtract 2 from the
number to get
the previous. What you are simply doing is to subtract a constant to what you already
have and you invent very little. In computer programming, you can solve this type of problem
by first writing a function, and then have the function call itself. This is the
basis for recursion.
|
Creating a Recursive Methods
|
|
A type of formula to create a recursive method is:
ReturnValue Function(Arguments, if any)
{
Optional Action . . .
Function();
Optionan Action . . .
}
A recursive method
starts with a return value. If it would not return a value, you can define it
with void. After its name, the method can take one or more
arguments. Most of the time, a recursive method takes at least one argument
that it would then modify. In the body of the method, you can take the
necessary actions. There are no particular steps to follow when implementing a
recursive method but there are two main rules to observe:
- In its body, the method must call itself
- Before or after calling itself, the method must check a condition that
would allow it to stop, otherwise, it might run continuously
For our example of counting decrementing odd numbers, you
could start by creating a method that takes an integer as argument. To
exercise some control on the lowest possible values, we will consider only
positive numbers. In the body of the method, we will display the current value
of the argument, subtract 2, and recall the method itself. Here is our
function:
using System;
public class Exercise
{
static void OddNumbers(int a)
{
if (a >= 1)
{
Console.Write("{0}, ", a);
a -= 2;
OddNumbers(a);
}
}
public static int Main()
{
const int Number = 9;
Console.WriteLine("Odd Numbers");
OddNumbers(Number);
Console.WriteLine();
return 0;
}
}
Notice that the method calls itself in its body. This would produce:
Odd Numbers
9, 7, 5, 3, 1,
Press any key to continue . . .
Recursive methods provide a valuable mechanism for
building lists or series, which are value that are either increment or decrement
but follow a pattern. Imagine that, instead of simply displaying odd numbers as
we did above, you want to add them incrementally. If you have 1, it would also
produce 1. If you have 5, you would like to add 1 to 3, then the result to 5,
and so on. This can be illustrated as follows:
1 = 1
|
1 + 3 = 4
|
1 + 3 + 5 = 9
|
1 + 3 + 5 + 7 = 16
|
1 + 3 + 5 + 7 + 9 = 25
|
To perform this operation, you would consider 1. If the
number is less than or equal to 1, the method should return 1. Otherwise, add
2 to 1, then add 2 to the new result. Continue this until you get to the value
of the argument. The method can be implemented as follows:
using System;
public class Exercise
{
static int AdditionalOdd(int a)
{
if (a <= 1)
return 1;
return a + AdditionalOdd(a - 2);
}
static void OddNumbers(int a)
{
if (a >= 1)
{
Console.Write("{0}, ", a);
a -= 2;
OddNumbers(a);
}
}
public static int Main()
{
const int Number = 9;
Console.WriteLine("Odd Numbers");
OddNumbers(Number);
Console.WriteLine();
Console.WriteLine("Sum of Odds: {0}\n", AdditionalOdd(Number));
return 0;
}
}
This would produce:
Odd Numbers
9, 7, 5, 3, 1,
Sum of Odds: 25
Press any key to continue . . .
|