Menu
Coddy logo textTech

Romper bucles etiquetados

Parte de la sección Lógica y flujo del Journey de Kotlin de Coddy. Lección 42 de 63.

Un break ordinario solo sale del bucle más cercano. Asigna una etiqueta al bucle externo, como search@, y luego usa break@search dentro de un bucle anidado para salir de toda la búsqueda cuando se alcance su objetivo. Una etiqueta pertenece al bucle que la sigue inmediatamente.

Dentro de main:

var found = -1
search@ for (row in listOf(listOf(1, 4), listOf(6, 8))) {
    for (value in row) {
        if (value % 2 == 0) {
            found = value
            break@search
        }
    }
}
println(found)

Cuatro es el primer valor par en el orden de las filas, y el break etiquetado omite las filas restantes.

Un break etiquetado sale del bucle con la etiqueta específica, incluido su trabajo anidado.

challenge icon

Desafío

Intermedio

Completa firstEven con los parámetros grid: List<List<Int>>. Encuentra el primer valor par en orden de filas, usando un salto etiquetado para detener ambos bucles. Devuelve -1 si no hay coincidencias. Los valores pares cero y negativos cuentan.

A menos que se indiquen límites más estrictos arriba, las colecciones contienen como máximo 100 elementos en cada nivel, y los argumentos enteros y los valores enteros de las colecciones están entre -1000 y 1000. El texto proporcionado para el análisis puede incluir representaciones no válidas o fuera de rango, como se describe.

Devuelve un valor de tipo Int. Conserva el código de entrada/salida proporcionado. Lee los argumentos escalares, uno por línea; una lista comienza con su cantidad, seguida de sus elementos, y un mapa comienza con su cantidad de entradas, seguida de cada clave y valor. Las listas anidadas repiten el formato de cantidad y elementos para cada fila. El main proporcionado imprime el valor devuelto seguido de un salto de línea. Las listas utilizan el formato estándar entre corchetes de Kotlin; no imprimas etiquetas adicionales.

Pruébalo tú mismo

fun firstEven(grid: List<List<Int>>): Int {
    // Escribe tu solución aquí.
    return 0
}
fun main() {
    val gridCount = readln().toInt()
    val grid = mutableListOf<List<Int>>()
    for (i0 in 0 until gridCount) {
        val gridItemCount = readln().toInt()
        val gridItem = mutableListOf<Int>()
        for (i1 in 0 until gridItemCount) {
            val gridItemItem = readln().toInt()
            gridItem.add(gridItemItem)
        }
        grid.add(gridItem)
    }
    println(firstEven(grid))
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y flujo

Practica por tu cuenta: Playground de Kotlin