Zufälligkeit ist kein Chaos: Wie Kotlin die Aufgabe von Stack Overflow löst
\n\nJeder Entwickler hat mindestens einmal in seinem Leben Code zur Generierung einer Zufallszahl geschrieben. Scheinbar könnte es nicht einfacher sein. Aber wenn diese Frage auf Stack Overflow gestellt wird (und die Frage "How can I get a random number in Kotlin?" sammelt tausende Aufrufe), wird klar: Es gibt mehr Fallstricke, als man denkt. Besonders wenn Sie von Java oder Python wechseln.
\n\nIn diesem Artikel werden wir die Generierung von Zufallszahlen in Kotlin von einfachen bis zu fortgeschrittenen Techniken behandeln. Sie erfahren, wie Sie eine zufällige ganze Zahl, eine Dezimalzahl erhalten, wie Sie einen Bereich festlegen und sogar wie Sie einen kryptografisch sicheren Random für die Sicherheit generieren. Los geht's!
\n\nGrundlagen: Random in Kotlin
\n\nKotlin hat keine eigene separate Klasse für Random – es verwendet das leistungsstarke java.util.Random aus Java, jedoch mit einer viel benutzerfreundlicheren Syntax. Dank Erweiterungsfunktionen kann Kotlin random Code buchstäblich in einer Zeile geschrieben werden.
Der einfachste Weg: Random.nextInt()
\n\nWenn Sie einfach eine zufällige ganze Zahl (von 0 bis zum Maximalwert von Int) benötigen, verwenden Sie:
\n\nimport kotlin.random.Random\n\nfun main() {\n val randomNumber = Random.nextInt()\n println("Zufallszahl: $randomNumber")\n}\n\nJeder Durchlauf gibt einen neuen Wert aus. Aber meistens müssen wir den Bereich einschränken. Dafür gibt es eine überladene Version:
\n\nval fromZeroToTen = Random.nextInt(10) // 0..9\nval fromFiveToFifteen = Random.nextInt(5, 15) // 5..14\n\nWichtig: In Kotlin, wie auch in Java, wird die obere Grenze nicht eingeschlossen. Random.nextInt(10) gibt eine Zahl von 0 bis 9 zurück.\n\nDezimalzahlen: Random.nextDouble() und Random.nextFloat()
\n\nZur Generierung eines zufälligen Float in Kotlin oder Double verwenden Sie:
\n\nval randomDouble = Random.nextDouble() // 0.0..1.0\nval randomFloat = Random.nextFloat() // 0.0..1.0\n\n// Mit Bereich:\nval doubleInRange = Random.nextDouble(10.0, 20.0) // 10.0..20.0\n\nBeachten Sie: nextFloat() unterstützt keinen Bereich – nur nextDouble(). Wenn Sie einen Float in einem Bereich benötigen, konvertieren Sie:
val customFloat = Random.nextDouble(1.5, 5.5).toFloat()\n\nGenerierung von Zufallszahlen in einem Bereich: Praktische Beispiele
\n\nAm häufigsten wird in realen Projekten eine Zufallszahl in einem bestimmten Bereich Kotlin benötigt. Lassen Sie uns die gängigsten Szenarien durchgehen.
\n\nZufällige ganze Zahl von 1 bis 100 (inklusive)
\n\nUm die obere Grenze einzuschließen, addieren Sie einfach 1:
\n\nval diceRoll = Random.nextInt(1, 7) // 1..6 (wie ein Würfel)\nval lottery = Random.nextInt(1, 101) // 1..100\n\nZufälliger Index eines Arrays oder einer Liste
\n\nEine der häufigsten Aufgaben ist es, ein zufälliges Element aus einer Sammlung zu erhalten:
\n\nval colors = listOf("Rot", "Blau", "Grün", "Gelb")\nval randomColor = colors[Random.nextInt(colors.size)]\nprintln("Zufällige Farbe: $randomColor")\n\nAber in Kotlin gibt es eine noch elegantere Methode – die Funktion random():
val randomColor = colors.random()\nprintln("Zufällige Farbe: $randomColor")\n\nUnter der Haube macht sie dasselbe, aber der Code wird sauberer.
\n\nZufallszahl mit Schrittweite
\n\nManchmal müssen Zahlen generiert werden, die ein Vielfaches eines bestimmten Wertes sind. Zum Beispiel gerade Zahlen von 0 bis 100:
\n\nfun randomEven(max: Int): Int {\n val half = max / 2\n return Random.nextInt(0, half + 1) * 2\n}\n\nprintln(randomEven(100)) // 0, 2, 4, ..., 100\n\nFortgeschrittene Techniken: Sequenzen und kryptografische Sicherheit
\n\nZufällige Zahlenfolge
\n\nWenn Sie eine Liste von Zufallszahlen generieren müssen, verwenden Sie generate