📖 Scenario: You are managing a small bookstore inventory. You want to list all the books with their position numbers to organize the shelves.
🎯 Goal: Build a Kotlin program that uses a for loop with withIndex() to print each book's position and title.
📋 What You'll Learn
Create a list called books with the exact titles: "The Hobbit", "1984", "Pride and Prejudice"
Create a variable called totalBooks to store the number of books
Use a for loop with withIndex() to iterate over books
Inside the loop, create a string called bookEntry that combines the index (starting from 1) and the book title
Add a final line that stores the last bookEntry in a variable called lastEntry
💡 Why This Matters
🌍 Real World
Listing items with their positions is common in inventory management, menus, and reports.
💼 Career
Understanding loops with indexes helps in data processing, UI lists, and database record handling.
Progress0 / 4 steps
1
Create the books list
Create a list called books with these exact titles: "The Hobbit", "1984", and "Pride and Prejudice".
Kotlin
Hint
Use listOf to create the list with the exact book titles.
2
Add totalBooks variable
Create a variable called totalBooks that stores the number of books in the books list.
Kotlin
Hint
Use books.size to get the number of items in the list.
3
Use for loop with withIndex()
Use a for loop with withIndex() to iterate over books. Inside the loop, create a string called bookEntry that combines the index (starting from 1) and the book title separated by a dot and space. For example, "1. The Hobbit".
Kotlin
Hint
Use for ((index, book) in books.withIndex()) and inside the loop create bookEntry with "${index + 1}. $book".
4
Store the last bookEntry
Add a variable called lastEntry outside the loop. Inside the loop, update lastEntry to the current bookEntry. This will keep the last book entry after the loop finishes.
Kotlin
Hint
Declare lastEntry as an empty string before the loop. Inside the loop, assign lastEntry = bookEntry.
Practice
(1/5)
1. What does the withIndex() function do in a Kotlin for loop?
easy
A. It filters elements based on their index.
B. It sorts the list before looping.
C. It provides both the index and the value of each element during iteration.
D. It reverses the list before looping.
Solution
Step 1: Understand the purpose of withIndex()
The withIndex() function returns an iterable of pairs containing the index and the value of each element in the collection.
Step 2: Identify what the loop receives
Using withIndex() in a for loop allows access to both the position (index) and the element (value) simultaneously.
Final Answer:
It provides both the index and the value of each element during iteration. -> Option C
Quick Check:
withIndex() = index + value [OK]
Hint: Remember: withIndex() gives index and value together [OK]
Common Mistakes:
Thinking it sorts or filters the list
Assuming it reverses the collection
Confusing index with value only
2. Which of the following is the correct syntax to loop over a list items with index in Kotlin?
easy
A. for ((index, value) in items.withIndex()) { /* code */ }
B. for (index, value in items) { /* code */ }
C. for (index; value in items.withIndex()) { /* code */ }
D. for index, value in items.withIndex() { /* code */ }
Solution
Step 1: Recall Kotlin destructuring syntax in loops
Kotlin allows destructuring pairs using parentheses in the for loop header, like for ((index, value) in ...).
Step 2: Match syntax with withIndex()
The correct syntax uses items.withIndex() and destructures the pair into index and value.
Final Answer:
for ((index, value) in items.withIndex()) { /* code */ } -> Option A
Quick Check:
Destructure pairs with (index, value) [OK]
Hint: Use parentheses to destructure pairs in for loop [OK]
Common Mistakes:
Omitting parentheses around (index, value)
Using semicolon instead of comma
Missing 'in' keyword
3. What will be the output of this Kotlin code?
val data = listOf("apple", "banana", "cherry")
for ((i, v) in data.withIndex()) {
println("$i: $v")
}
medium
A. 0: apple
1: banana
2: cherry
B. apple: 0
banana: 1
cherry: 2
C. 1: apple
2: banana
3: cherry
D. Error: cannot destructure
Solution
Step 1: Understand the list and loop
The list contains three fruits: "apple", "banana", "cherry". The loop uses withIndex() to get index and value.
Step 2: Trace the loop output
Each iteration prints the index and value separated by colon and space. Indices start at 0.
Final Answer:
0: apple
1: banana
2: cherry -> Option A
Quick Check:
Index starts at 0, prints index: value [OK]
Hint: Index starts at 0 in withIndex() loops [OK]
Common Mistakes:
Assuming index starts at 1
Swapping index and value in output
Expecting error from destructuring
4. Identify the error in this Kotlin code snippet:
val numbers = arrayOf(10, 20, 30)
for (i, num in numbers.withIndex()) {
println("$i -> $num")
}
medium
A. Cannot use withIndex() on arrays.
B. Missing parentheses around (i, num) in the for loop.
C. The println statement syntax is incorrect.
D. Variable names i and num are reserved keywords.
Solution
Step 1: Check for correct destructuring syntax
In Kotlin, destructuring pairs in a for loop requires parentheses: for ((i, num) in ...).
Step 2: Verify other parts of the code
Using withIndex() on arrays is valid. The println syntax and variable names are correct.
Final Answer:
Missing parentheses around (i, num) in the for loop. -> Option B
Quick Check:
Destructure pairs with parentheses [OK]
Hint: Always use parentheses to destructure pairs in for loops [OK]
Common Mistakes:
Omitting parentheses in destructuring
Thinking withIndex() doesn't work on arrays
Misreading println syntax
5. Given a list of database table names tables = listOf("users", "orders", "products"), how can you create a map of index to table name using a Kotlin for loop with withIndex()?
hard
A. val map = mutableMapOf()
for (t in tables) {
map[t] = t.length
}
B. val map = mutableMapOf()
for ((i, t) in tables.withIndex()) {
map[t] = i
}
C. val map = mutableMapOf()
for (i in tables.withIndex()) {
map[i] = tables[i]
}
D. val map = mutableMapOf()
for ((i, t) in tables.withIndex()) {
map[i] = t
}
Solution
Step 1: Understand the goal
We want a map where keys are indices (Int) and values are table names (String).
Step 2: Use withIndex() to get index and value
Loop over tables.withIndex() and assign map[i] = t to build the map correctly.
Final Answer:
val map = mutableMapOf()
for ((i, t) in tables.withIndex()) {
map[i] = t
} -> Option D
Quick Check:
Index to value mapping with withIndex() [OK]
Hint: Use withIndex() and map[i] = value to build index-value map [OK]
Common Mistakes:
Swapping key and value types in map
Not destructuring with parentheses
Using wrong loop variable types
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.