Ich hatte nun schon in einigen Bereichen auf den sogenannten Pseudozufall hingewiesen. Alles, was wir bisher gezeigt haben, ist kein Zufall, auch wenn wir umgangssprachlich zudem bereits von Zufall gesprochen haben. Der Hintergrund ist, dass ein PC keinen Zufall erstellen kann, solang keine Hardwarekomponenten elektrisches Rauschen oder spezielle Hardware für Zufälle genutzt wird. Den letztlich heißen die Methoden ja nextInt, nextLong und nicht randomInt. Der Teufel steckt im Detail, solange eben nicht externe Einflüsse zugrunde liegen, wird auf eine mathematische Funktion zurückgegriffen, auch bekannt als lineare Kongruenzgenerator oder LCG. Dieser liegt auch bei Java und der Random Klasse zugrunde. Bedeutet, die nächste Zahl ist keine zufällige Zahl, sondern basiert auf der vorherigen. Dadurch sind die Zahlen leicht vorherzusagen, da diese einfach berechnet werden können. Standardmäßig arbeite der Konstruktor von der Random Klasse mit der Methode System.nanoTime(), wodurch eine Veränderung herbeigeführt wird, dass immer andere Zahlen entstehen, aber sobald die ersten Zahlen der Serie bekannt sind, können die nächsten wieder berechnet werden.
Wenn wir die Random Klasse zum Beispiel mit einem statischen Seed aufrufen, ohne andere Parameter dort einzubeziehen wie eben eine Systemzeit, wird immer dieselbe Reihe an Zahlen entstehen. Schau dir einmal das nächste Codebeispiel an, dort habe ich es einmal verdeutlicht. Falls du mir noch nicht glauben willst, führe dieses Beispiel so oft aus, wie du willst, du wirst immer auf dieselben Zahlen stoßen.
Random rn = new Random(5);
for (int i = 0; i < 10; i++) {
System.out.println(rn.nextInt(150, 200));
}