This lab serves multiple goals:
- To introduce you to
foreachloops, - To introduce you to their use cases,
- To compare
forloops andforeachloops by converting between them, and - To illustrate how
foreachcan be useful in conjunction with classes.
Practicing foreach Loops
Warm-up
Create a new project, and replace the content of the Main method with
the following code:
int[] primes = {2, 3, 5, 7, 11, 13, 17, 19};
for(int i = 0; i < primes.Length; i++)
{
Console.WriteLine(primes[i]);
}Execute the code. You should see the elements of the array primes (the prime numbers less than 20) in the console.
Next rewrite the code using a foreach statement, then answer the following questions:
- Identify two differences between the
forandforeachversions. - Which one is easier to understand?
- Which one needs fewer variables?
Answers:
The code simply becomes:
int[] primes = {2, 3, 5, 7, 11, 13, 17, 19};
foreach(int val in primes)
{
Console.WriteLine(val);
} - The differences are the keyword (obviously!), the fact that
foreachdoes not need indices nor to use theLengthproperty, and the absence of an update or condition in the header. - This is a matter of taste, but
foreachgenerally seems more intuitive. - Both use one additional variable (
iin theforcase,valin theforeachcase).
Converting from for to foreach (1/2)
Can you rewrite the following code with a foreach statement? Why?
double[] numbers = {1.2, 4.3, 5.7, 11, -3.13, 1.7};
for(int i = 0; i < numbers.Length; i++)
{
numbers[i] = numbers[i] * 1.1;
Console.WriteLine(numbers[i]);
}Converting from for to foreach (2/2)
Can you rewrite the following code with a foreach statement? Why?
double[] numbers = {1.2, 4.3, 5.7, 11, -3.13, 1.7};
for(int i = 0; i < numbers.Length - 1; i++)
{
Console.WriteLine((numbers[i] + numbers[i+1]) / 2);
}Conversion between for and foreach
- Can you think of any loops that can be implemented with foreach but not with for? If so, write an example.
- Can you think of any loops that can be implemented with for but not with foreach? If so, write an example.
Mixing foreach With Classes
Download the Library project, extract it, and open it with your IDE.
Observe the program and its two classes:
- The
Bookclass represents a single book. Programcreates an array of 10 books.
Next modify the code in Program.cs to perform the following steps:
- Write a
foreachloop that displays all the books. - Add statements where you ask the user to enter a year, then modify
the
foreachloop to display only books published on or after the year the user entered. - Write a
forloop implementation that performs the same task of displaying books published on or after the year user entered.
Which one do you prefer to implement the above search? Explain your answer.