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.