Galton-Brett

Status
Nicht offen für weitere Antworten.

Parker

Mitglied
hallo zusammen!! vielleicht kann mir jemand bei folgender aufgabe behilflich sein ... und zwar muss ich ein galton-brett rechnerisch mit java simulieren.

- es gibt 4 reihen von hindernissen (1 bis 4)
- in 5 kammern können die kugeln landen (0 bis 4)
- 10.000 durchläufe

ziel ist es auszugeben, wieviele kugeln sich in den jeweiligen kammern angesammelt haben.



leider scheiterts bei mir schon daran, dass ich anscheinend die for schleife nicht wirklich richtig zum laufen bringe. der code den ich bisher habe sieht so aus:

Code:
package Versuche;

public class GaltonBrett {
    
    public static void main(String[] args) {
    int e;
    int i;
    int f = 4;
    for (e = 1; e <= 10000; e++) {
       for (i = 1; i <= 4; i++) {
            if (Math.random() < 0.5) {
             f = f - 1; }
            else {f = f + 1;}
         }
             System.out.println(f);
    
}
    }
}

ausgegeben werden hier die verrücktesten zahlen .. von -200irgendwas bis +200 usw. ??!! kann aber doch nicht sein, weil die berechnung von f doch nur 4 mal vorgenommen sollte oder ?

könnt ihr mir evtl. sagen, wo das problem ?

danke + grüße
 

0xdeadbeef

Top Contributor
Sollte f nicht in jedem Versuch wieder zurückgesetzt werden?
Und sollte es nit einen Ergebnis-Array geben, also z.B. kammer[5] für 5 Kammern?
 

Parker

Mitglied
jep, so ist es. aber wird es nicht automatisch wieder auf 4 gesetzt, wenn die schleife erneut durchläuft?
 

0xdeadbeef

Top Contributor
In etwa so:

Code:
public class Galton {
    
    public static void main(String[] args) {
        int versuch, position, reihen=4;
        
        int kammer[] = new int[reihen+1]; 
        
        for (versuch = 0; versuch < 10000; versuch++) {
            position = 0;
            for (int pos = 0; pos < reihen; pos++)
                if (Math.random() >= 0.5)
                    position++;                     
            kammer[position]++;
        }
        
        // Ausgabe
        for (int pos = 0; pos <= reihen; pos++)
            System.out.println("Fach "+(pos+1)+ " enthaelt "+kammer[pos]+ " Kugeln.");
    }
}

Kann auch beliebig auf mehr Reihen erweitert werden...

Und noch ein paar Anmerkungen:
"f" mit 4 zu initialisieren ist ziemlich eigenartig, weil in der ersten Reihe ja nur ein Hindernis existiert. Zudem muß "f" (bei mir: "position") am Beginn jedes Schleifendurchlaufs wieder auf das erste Hindernis gesetzt werden (bei mir: 0).

Außerdem ist es unschön, for-Schleifen bei 0 zu beginnen, ,statt
for (int pos = 1; pos <= reihen; pos++)
kann man auch schreiben:
for (int pos = 0; pos < reihen; pos++)

In meinem Algorithmus habe ich die Reihen linksbündig angeordnet:

#
##
###
####

Also jede Reihe beginnt mit Position 0. Links bedeutet: "position" wird wird nicht erhöht, rechts bedeutet "position" wird erhöht.

Am Schluß jeden Versuchs muß dann der Inhalt der Kammer, auf die "position" verweist, um eins erhöht werden (Kugel ist in Kammer "position" gefallen).
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben