Labeled break and continue help you control loops more precisely when you have nested loops.
When you want to stop an outer loop from inside an inner loop.
When you want to skip to the next iteration of an outer loop from inside an inner loop.
When you have multiple loops inside each other and need clear control over which loop to break or continue.
When normal break or continue only affects the closest loop but you want to affect a specific outer loop.
Syntax
Kotlin
label@ for (item in collection) {
// code
break@label // stops the loop labeled 'label'
continue@label // skips to next iteration of loop labeled 'label'
}
The label is a name you give to a loop followed by @.
You use break@label or continue@label to control that specific loop.
Examples
This stops the outer loop when j equals 2.
Kotlin
outer@ for (i in1..3) {
for (j in1..3) {
if (j == 2) break@outer
println("i = $i, j = $j")
}
}
This skips to the next iteration of the outer loop when j equals 2.
Kotlin
outer@ for (i in1..3) {
for (j in1..3) {
if (j == 2) continue@outer
println("i = $i, j = $j")
}
}
Sample Program
This program prints pairs of i and j. When j equals 2, it breaks the outer loop labeled 'outer', stopping all loops.
Kotlin
fun main() {
outer@ for (i in1..3) {
for (j in1..3) {
if (j == 2) {
println("Breaking outer loop when i=$i and j=$j")
break@outer
}
println("i = $i, j = $j")
}
}
}
OutputSuccess
Important Notes
Labels must be placed before the loop you want to control.
Using labeled break or continue makes your code clearer when working with nested loops.
Don't overuse labels; sometimes refactoring loops can be simpler.
Summary
Labeled break and continue let you control specific loops in nested loops.
Use break@label to stop a labeled loop.
Use continue@label to skip to the next iteration of a labeled loop.
Practice
(1/5)
1. What does the break@label statement do in Kotlin nested loops?
easy
A. It stops the loop identified by the label immediately.
B. It skips the current iteration of the innermost loop.
C. It restarts the entire program from the beginning.
D. It pauses the loop until a condition is met.
Solution
Step 1: Understand labeled break usage
The break@label statement is used to exit a specific loop marked by the label, not just the innermost loop.
Step 2: Compare with other options
Options B and D describe continue or pause behavior, which is incorrect. It restarts the entire program from the beginning. is unrelated to loop control.
Final Answer:
It stops the loop identified by the label immediately. -> Option A
Quick Check:
break@label stops labeled loop [OK]
Hint: break@label exits the labeled loop immediately [OK]
Common Mistakes:
Confusing break@label with continue@label
Thinking break@label only stops innermost loop
Assuming break@label pauses instead of stops
2. Which of the following is the correct syntax to continue the outer loop labeled outerLoop in Kotlin?
easy
A. continue#outerLoop
B. continue outerLoop
C. continue(outerLoop)
D. continue@outerLoop
Solution
Step 1: Recall Kotlin labeled continue syntax
Kotlin uses the @ symbol to refer to labels with break or continue, so the correct syntax is continue@label.
Step 2: Eliminate incorrect options
Options B, C, and D use invalid syntax for labels in Kotlin.
Final Answer:
continue@outerLoop -> Option D
Quick Check:
Use continue@label to continue labeled loop [OK]
Hint: Use @ symbol with label for continue or break [OK]
Common Mistakes:
Omitting @ symbol before label
Using parentheses or other symbols with label
Confusing syntax with other languages
3. What is the output of the following Kotlin code?
outer@ for (i in 1..3) {
inner@ for (j in 1..3) {
if (i == 2 && j == 2) break@outer
print("$i$j ")
}
}
medium
A. 11 12 13 21 22
B. 11 12 13 21
C. 11 12 13 21 22 23
D. 11 12 13
Solution
Step 1: Trace nested loops and break condition
The outer loop runs i=1 to 3, inner loop j=1 to 3. When i=2 and j=2, break@outer stops the outer loop entirely.
Step 2: List printed values before break
For i=1, j=1..3 prints 11 12 13. For i=2, j=1 prints 21, then at j=2 break@outer stops all loops. So output is "11 12 13 21".
Final Answer:
11 12 13 21 -> Option B
Quick Check:
break@outer stops all loops at i=2,j=2 [OK]
Hint: break@label stops all loops at labeled point [OK]
Common Mistakes:
Assuming break@outer only stops inner loop
Including values after break condition
Confusing break@outer with continue@outer
4. Identify the error in this Kotlin code snippet:
outer@ for (i in 1..2) {
for (j in 1..2) {
if (i == 1) continue outer
println("i=$i, j=$j")
}
}
medium
A. continue@outer should be used instead of continue outer.
B. continue cannot be used with a label on an inner loop.
C. Label 'outer' is not defined.
D. No error; code runs correctly.
Solution
Step 1: Check labeled continue syntax
Kotlin requires the @ symbol when using labels with break or continue, so it must be continue@outer.
Step 2: Verify label definition and usage
The label 'outer' is correctly defined, so Label 'outer' is not defined. is wrong. Using continue with label without @ causes syntax error.
Final Answer:
continue@outer should be used instead of continue outer. -> Option A
Quick Check:
Use continue@label syntax to avoid errors [OK]
Hint: Always use @ with label in continue or break [OK]
Common Mistakes:
Omitting @ symbol in labeled continue
Thinking label must be on inner loop
Assuming no error when syntax is wrong
5. Given nested loops labeled outer and inner, how can you skip only the current iteration of the outer loop when a condition in the inner loop is met?
hard
A. Use break@outer inside inner loop.
B. Use continue without label inside inner loop.
C. Use continue@outer inside inner loop.
D. Use break without label inside inner loop.
Solution
Step 1: Understand labeled continue effect
Using continue@outer skips the current iteration of the outer loop, moving to the next iteration of outer.
Step 2: Compare with break and unlabeled continue
break@outer would exit the outer loop entirely, not just skip iteration. Unlabeled continue affects only inner loop.
Final Answer:
Use continue@outer inside inner loop. -> Option C
Quick Check:
continue@outer skips outer loop iteration [OK]
Hint: Use continue@label to skip labeled loop iteration [OK]
Common Mistakes:
Using break@outer instead of continue@outer
Using unlabeled continue to skip outer loop
Confusing break and continue effects
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.