Menu
Coddy logo textTech

Interrompere cicli etichettati

Fa parte della sezione Logica e flusso del percorso Kotlin di Coddy. Lezione 42 di 63.

Un'interruzione ordinaria esce solo dal ciclo più vicino. Assegna un'etichetta a un ciclo esterno, come search@, poi usa break@search all'interno di un ciclo annidato per uscire dall'intera ricerca quando viene raggiunto l'obiettivo. Un'etichetta appartiene al ciclo che la segue immediatamente.

Dentro di 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)

Quattro è il primo valore pari nell'ordine delle righe e l'interruzione etichettata salta le righe rimanenti.

Un break con etichetta esce dal ciclo contrassegnato con quell'etichetta, comprese le operazioni annidate.

challenge icon

Sfida

Medio

Completa firstEven con il parametro grid: List<List<Int>>. Trova il primo valore pari nell’ordine delle righe, usando un’interruzione con etichetta per fermare entrambi i cicli. Restituisci -1 se non ci sono corrispondenze. Anche i valori pari zero e negativi contano.

Salvo limiti più restrittivi indicati sopra, le raccolte contengono al massimo 100 elementi per livello e gli argomenti interi e i valori interi delle raccolte sono compresi tra -1000 e 1000. Il testo fornito per l’analisi può includere rappresentazioni non valide o fuori intervallo, come descritto.

Restituisci un valore di tipo Int. Mantieni il codice di input/output fornito. Legge gli argomenti scalari uno per riga; un elenco inizia con il suo conteggio seguito dai suoi elementi, mentre una mappa inizia con il conteggio delle sue voci seguito da ciascuna chiave e valore. Gli elenchi annidati ripetono il formato conteggio-ed-elementi per ogni riga. Il main fornito stampa il valore restituito seguito da un carattere di nuova riga. Gli elenchi usano il formato standard tra parentesi quadre di Kotlin; non stampare etichette aggiuntive.

Provalo tu

fun firstEven(grid: List<List<Int>>): Int {
    // Write your solution here.
    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 iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Playground Kotlin