Skip to main content

Kotlin While Loop

Introduction

Loops are fundamental programming constructs that allow us to execute a block of code repeatedly based on a condition. In Kotlin, the while loop is one of the basic loop structures that continues to execute its body as long as its condition evaluates to true.

Unlike for loops (which typically iterate a fixed number of times), while loops are particularly useful when you don't know in advance how many times you need to repeat a certain task.

Basic Syntax

The basic syntax of a while loop in Kotlin is:

kotlin
while (condition) {
// code to be executed repeatedly
// as long as condition is true
}

Here's how it works:

  1. The condition is evaluated
  2. If the condition is true, the code inside the loop executes
  3. After execution, control returns to step 1
  4. If the condition is false, the loop terminates and execution continues with the code after the loop

Simple While Loop Example

Let's start with a basic example that counts from 1 to 5:

kotlin
fun main() {
var counter = 1

while (counter <= 5) {
println("Count: $counter")
counter++ // increment counter by 1
}

println("Loop finished")
}

Output:

Count: 1
Count: 2
Count: 3
Count: 4
Count: 5
Loop finished

In this example:

  • We initialize a counter variable to 1
  • We run the loop as long as counter is less than or equal to 5
  • Inside the loop, we print the current value and increment the counter
  • Once the counter reaches 6, the condition becomes false, and the loop exits

The do-while Loop Variant

Kotlin also provides a do-while loop, which is similar to the while loop but guarantees that the code block will execute at least once, regardless of whether the condition is initially true:

kotlin
do {
// code to be executed at least once
// and then repeatedly as long as condition is true
} while (condition)

Example of do-while Loop

kotlin
fun main() {
var number = 6

do {
println("Current number: $number")
number++
} while (number <= 5)

println("Loop finished with number = $number")
}

Output:

Current number: 6
Loop finished with number = 7

Notice that even though the condition number <= 5 was false from the beginning (since number was initialized as 6), the loop body still executed once before checking the condition.

Infinite Loops

A loop whose condition always evaluates to true is called an infinite loop. They can be intentional or accidental:

kotlin
// Intentional infinite loop
while (true) {
println("This will run forever unless broken")
// usually contains a break statement somewhere
}

To exit an infinite loop, you can use the break statement:

kotlin
fun main() {
var counter = 1

while (true) {
println("Iteration: $counter")
counter++

if (counter > 5) {
println("Breaking the loop")
break
}
}

println("Loop finished")
}

Output:

Iteration: 1
Iteration: 2
Iteration: 3
Iteration: 4
Iteration: 5
Breaking the loop
Loop finished

Using continue in While Loops

The continue statement skips the current iteration of the loop and proceeds with the next iteration:

kotlin
fun main() {
var counter = 0

while (counter < 10) {
counter++

// Skip printing even numbers
if (counter % 2 == 0) {
continue
}

println("Odd number: $counter")
}
}

Output:

Odd number: 1
Odd number: 3
Odd number: 5
Odd number: 7
Odd number: 9

Nested While Loops

You can nest one while loop inside another:

kotlin
fun main() {
var i = 1

while (i <= 3) {
println("Outer loop: $i")

var j = 1
while (j <= 2) {
println(" Inner loop: $j")
j++
}

i++
}
}

Output:

Outer loop: 1
Inner loop: 1
Inner loop: 2
Outer loop: 2
Inner loop: 1
Inner loop: 2
Outer loop: 3
Inner loop: 1
Inner loop: 2

Practical Examples

Example 1: User Input Validation

The while loop is great for validating user input until they provide a valid response:

kotlin
fun main() {
var userInput: Int?
var validInput = false

println("Please enter a number between 1 and 10:")

while (!validInput) {
try {
userInput = readLine()?.toInt()

if (userInput != null && userInput in 1..10) {
println("Thank you! You entered: $userInput")
validInput = true
} else {
println("Invalid input. Please enter a number between 1 and 10:")
}
} catch (e: NumberFormatException) {
println("Invalid input. Please enter a number between 1 and 10:")
}
}
}

In this example, the loop continues until the user provides a valid number between 1 and 10.

Example 2: Menu-Driven Application

A while loop can implement a menu-driven program structure:

kotlin
fun main() {
var running = true

while (running) {
println("\nMenu:")
println("1. Say Hello")
println("2. Calculate Sum")
println("3. Exit")
print("Enter your choice: ")

when (readLine()?.toIntOrNull()) {
1 -> println("Hello, user!")
2 -> {
println("Enter two numbers:")
val a = readLine()?.toDoubleOrNull() ?: 0.0
val b = readLine()?.toDoubleOrNull() ?: 0.0
println("Sum: ${a + b}")
}
3 -> {
println("Exiting program...")
running = false
}
else -> println("Invalid option. Please try again.")
}
}
}

This example shows how a while loop can create an interactive menu that runs until the user chooses to exit.

Best Practices

  1. Always ensure the loop condition will eventually become false: Make sure your loop has a way to terminate, otherwise it becomes an infinite loop.

  2. Use appropriate loop variables: Make sure your loop variables are correctly initialized and updated within the loop.

  3. Consider loop alternatives: In some cases, a for loop or other Kotlin constructs like .repeat() or collection functions may be more appropriate.

  4. Be careful with loop conditions: Double-check that your loop condition is correct to avoid off-by-one errors.

  5. Keep loops simple: If your loop body becomes complex, consider refactoring parts of it into functions.

Common Pitfalls

Infinite Loops

The most common mistake is creating an accidental infinite loop by forgetting to update the condition variable:

kotlin
// Problematic code - infinite loop
var i = 1
while (i <= 5) {
println(i)
// forgot to increment i!
}

Fencepost Errors

Another common issue is "fencepost" or "off-by-one" errors:

kotlin
var i = 0
while (i < 5) {
i++
println(i) // Prints 1 through 5, not 0 through 4
}

Be clear about whether you want to include or exclude the boundary values in your loop.

Summary

The while loop in Kotlin is a fundamental control structure that allows you to repeatedly execute code based on a condition. Key points to remember:

  • A while loop executes its body as long as its condition is true
  • A do-while loop always executes its body at least once
  • Use break to exit a loop early
  • Use continue to skip to the next iteration
  • Be cautious about infinite loops
  • While loops are ideal when the number of iterations is not known in advance

Exercises

To solidify your understanding of Kotlin while loops, try these exercises:

  1. Write a program that uses a while loop to find the sum of all numbers from 1 to n, where n is provided by the user.

  2. Create a guessing game where the computer generates a random number between 1 and 100, and the user tries to guess it. Use a while loop to keep asking until they get it right.

  3. Implement a simple calculator program that uses a do-while loop to allow the user to perform multiple calculations until they choose to exit.

  4. Write a program that prints a countdown from 10 to 1, then prints "Blastoff!"

  5. Create a program that uses a while loop to print the first 10 Fibonacci numbers.

Additional Resources

Happy coding with Kotlin while loops!



If you spot any mistakes on this website, please let me know at feedback@compilenrun.com. I’d greatly appreciate your feedback! :)