# Unit 2 Part 2 Summary on Loops (2.7-2.12)

Each coding exercise has its own folder. Open its `.java` file and press **Run** to try it. **Run Tests** checks every graded exercise in this lesson at once.

In the second half of this unit, lessons 2.7-2.12, you learned about **loops**. **Loops** are used to repeat a statement or block of statements inside a pair of curly braces.

## Concept Summary

- **Body of a Loop** - The single statement or a block of statements that *can* be repeated (a loop may not execute at all if the condition is false to start with). In Java the body of the loop is either the first statement following a `while` or `for` loop is the body of the loop or a block of statements enclosed in `{` and `}`.
- **For Loop** - A loop that has a header with 3 optional parts: initialization, condition, and change. It does the initialization one time before the body of the loop executes, executes the body of the loop if the condition is true, and executes the change after the body of the loop executes before checking the condition again.
- **Infinite Loop** - A loop that never ends.
- **Loop** - A way to repeat one or more statements in a program.
- **Nested Loop** - One loop inside of another.
- **Out of Bounds error** - A run-time error that occurs when you try to access past the end of a string or list in a loop.
- **Trace Code** - Writing down the values of the variables and how they change each time the body of the loop executes.
- **While Loop** - A loop that repeats while a Boolean expression is true.

## Java Keyword Summary

- **while** - used to start a while loop
- **for** - used to start a for loop or a for each loop
- **System.out.println(variable)** - used to print the value of the variable. This is useful in tracing the execution of code and when debugging.

## Vocabulary Practice

> Check your understanding: Drag the definition from the left and drop it on the correct concept on the right. — answer it on CS Awesome: https://runestone.academy/ns/books/published/csawesome2/loops-summary.html#vocabloops1

> Check your understanding: Drag the definition from the left and drop it on the correct method on the right. — answer it on CS Awesome: https://runestone.academy/ns/books/published/csawesome2/loops-summary.html#vocabloops2

For more practice, see this [Quizlet](https://quizlet.com/434072046/cs-awesome-unit-4-vocabulary-flash-cards/).

## Common Mistakes

- Forgetting to change the thing you are testing in a `while` loop and ending up with an infinite loop.
- Getting the start and end conditions wrong on the `for` loop. This will often result in you getting an **out of bounds error**. An **out of bounds** error occurs when you try to access past the end of a string.
- Jumping out of a loop too early by using one or more return statements inside of the loop.

Here is an example of a while loop that doesn’t ever change the value in the loop so it never ends. If you run it press Ctrl+C in the terminal to stop it. Fix it.

### Exercise 1

Fix the infinite loop so that it counts from 3 down to 1.

> Open the `01-while-loop-mistake1` folder and edit `Loop1.java`. Press **Run** to try it; **Run Tests** checks it (1 test).

Here is an example of going past the bounds of a string. This code should double all but the first and last letter in message. Fix the code so that it doesn’t cause an out of bounds error.

### Exercise 2

Fix the test condition in the loop below so that it doesn’t cause an out of bounds error.

> Open the `02-while-loop-oob` folder and edit `Loop2.java`. Press **Run** to try it; **Run Tests** checks it (1 test).

Here is an example of jumping out of a loop too early. The code below is intended to test if all of the letters in a string are in ascending order from left to right. But, it doesn’t work correctly. Can you fix it?

### Exercise 3

Fix the code so it does not leave the loop too early. When should you return true or false?

> Open the `03-while-loop-early-leave` folder and edit `Loop3.java`. Press **Run** to try it; **Run Tests** checks it (2 tests).
