Zunächst sollen eine bestimmte Anzahl (umfang) gauss-verteilte Zufallszahlen ermittelt werden. Anschließend wird die Häufigkeitsverteilung dieser Zahlen ermittelt und am Bildschirm mit entsprechend langen * - Reihen ausgegeben.
import java.io.*; import java.util.Random; public class gauss { public static void main (String[] args) throws IOException { int zahl; do { BufferedReader zahlenpuffer = new BufferedReader(new InputStreamReader(System.in)); zahl = Integer.parseInt(zahlenpuffer.readLine()); if (zahl>0) analyse(zahl); } while (zahl > 0); } public static void analyse(int anzahl) { int erg[] = new int[21]; double gausszahl; Random r = new Random(); for (int i=0; i<21; i++) erg[i]=0; for (int i = 0; i<anzahl; i++) { gausszahl = r.nextGaussian()*2; if ((gausszahl <= 10) && (gausszahl) >= (-10)) erg[(int) (gausszahl+10)]++; } for (int i=0; i<21; i++) ausgabe(i-10, erg[i]); } public static void ausgabe(int wert, int reihe) { System.out.print(" " + wert + ":\t"); for (int i=0; i<reihe; i++) System.out.print("*"); System.out.print("\n"); } }
Für 300 gewählte Zufallszahlen erhalten wir beispielsweise:
300 -10: -9: -8: -7: -6: * -5: ****** -4: *************** -3: ******************** -2: ***************************************** -1: *************************************************************** 0: ************************************************************** 1: ******************************************** 2: ***************************** 3: ************** 4: **** 5: * 6: 7: 8: 9: 10:
Gauss'sche Zufallszahlen sind um den Mittelwert 0 verteilt - und zwar haben die meisten Zahlen einen Wert nahe Null. Symmetrisch dazu fallen die Häufigkeiten nach beiden Seiten sehr stark ab; beispielsweise treten nur mehr sehr wenige Gauss'sche Zufallszahlen mit einem Wert von beispielsweise -3 oder 5 auf. Der Ausdruck gausszahl = r.nextGaussian()*2; verdoppelt die gefundenen Zufallszahlen, sodass der Bereich um 0 herum etwas breiter wird... Liegt eine Zahl zwischen -10 und 10 (was den möglichen Indizes des Zählfeldes erg[] entspricht), so wird das der Größe dieser Zahl entsprechende Zählfeld inkrementiert (dabei muss der Zahlenwert mittels Type-Castings in eine Ganzzahl umgeformt werden). Schließlich werden die Zählergebnisse an Hand entsprechend langer * - Reihen ausgegeben.
Der ``Vergrößerungsfaktor'' (im Beispiel der Faktor 2) könnte auch als Befehlszeilenargument übergeben werden. Beachte, dass einzelne Werte auch außerhalb des Zählintervalles liegen könnten.