Java Wahrscheinlichkeiten

BabyBlue

Grünschnabel
Hey Leute,

brauche dringend Hilfe!

public class Uebung01 {
public static void main (String [] args) {

CommandLine cl=new CommandLine();
int x = cl.readInt( "Geben Sie die Anzahl der Würfe an:");

for (int j = 0;j<x ;j++ ) {
int i = (int) ((Math.random()*6) + 1);
System.out.println(i);
}

System.out.println("\n");
}
}


Wie ihr sehen könnt erzeugt das Programm x beliebige Zufallszahlen im Intervall von 1-6.

Ich muss das Programm so erweitern, dass die Anzahl der Würfe für jede Zahl gezählt und am Ende als Prozentzahl angezeigt werden.

Ich weiß dass ich jetzt mit arrays arbeiten muss aber ich weiß nicht WIE ich anfangen soll kann mir jemand von euch einen Ansatz oder so geben?

MfG
 
Hi,

du könntest auch erstmal 6 versiedene Variablen nehmen und diese jeweils um eins hochzählen, wenn entsprechende Zahl kommt und später das ganze per Array realisieren.
Ansonsten:
Java:
int arZahlen[] = new int[6];
erstellt dir ein Array mit Länge 6. Wenn du auf ein bestimmtes Feld zugreifen willst, musst du den entsprechenden Index angeben. Beachte aber, dass ein Array bei 0 begint. Dieses 6Stellige Array geht also von Feld 0 - 5.

Ich denke mal du kommst selbst hinter die Logik, oder? ;)

Noch Fragen? :)
 
Danke für die schnelle Antwort!
hmmm ja ich glaub ich weiß was du meinst!

Ich soll für jeden Zahl (1-6) einen Array erstellen.
Wie geht es dann mit dem zählen der Häufigkeit der Zahlen?

Gruß
 
Nö, hast mich wohl nicht richtig verstanden ^^

Du hast ein Array mit 6 Feldern. Jedes Feld steht für eine Zahl.
Sagen wir mal das erste Feld steht für die Zahl 1. Dann speicherst du im Feld für die Zahl 1 eben wie oft diese schon dran gekommen ist.
Du nimmst deine Zufallszahl um damit auf das Array zuzugreifen:
Java:
arZahlen[iZufallszahl];
Jetzt haben wir aber das Problem, dass ein Array mit 0 zu Zählen beginnt, sodass du spätestens bei der Zahl 6 eine ArrayOutOfBound-Exception bekommst, da das Array ja nur bis zum Index 5 geht.. Da gibt es aber einen Trick:
Java:
arZahlen[iZufallszahl-1];
Ich hoffe mal du verstehst wie ich das meine. Das Feld mit dem Index 0 steht für die Zahl 1, der Index 1 für 2, usw...

Java:
for (int j = 0;j<x ;j++ ) {
    int i = (int) ((Math.random()*6) + 1);
    arZahlen[i-1]++;
    System.out.println(i);
}
Kannst du mir folgen?

Am Ende hättest du dann ein Array in dem der Reihe nach angeordnet steht, wie oft jede Zahl dran kam ;)
 
Zuletzt bearbeitet:
Hi
Du kannst in deiner for-Schleife wie Matze schon erwänt hat den betreffenden Wert im Array um 1 erhöhen (arZahlen[i-1]=arZahlen[i-1]+1; oder Kurzschreibweise: arZahlen[i-1]++;)

Und am Schluss die jeweiligen Arrayeinträge durch x (deine Anzahl Würfe) teilen und ausgeben.


Gruss
 
Falls dir meine Erklährung noch etwas zu schwammig ist (war ein langer Tag) dann kannst du dir auch noch das Tutorial aus unserm Forum ansehen ;)
 
Hey, also ich habe schon mal soweit gemacht:

Code:
public class Uebung01  {

   public static void main (String [] args) {

      CommandLine cl=new CommandLine();
      int x = cl.readInt( "Geben Sie die Anzahl der Würfe an:");

      int arZahlen[] = new int[6];
      arZahlen[0] = 1;
      arZahlen[1] = 2;
      arZahlen[2] = 3;
      arZahlen[3] = 4;
      arZahlen[4] = 5;
      arZahlen[5] = 6;

      for (int j = 0;j<x ;j++ ) {
      int i = (int) ((Math.random()*6) + 1);
      arZahlen[i-1]++;
      System.out.println(i);
      }

      System.out.println("\n");
   }

}

Ist doch alles richtig soweit oder?
 
wozu initialisierst du das feld "arZahlen" mit 1-6? du möchtest doch die Anzahl der Würfe zählen, also musst du jeden Eintrag mit 0 initialisieren sonst würde das bedeuten das am Anfang (wo noch kein Wurf getätigt wurde) die 6 schon 6 mal vorgekommen ist und das is ja wohl nicht so gedacht ;)
 
achso ok!

Wenn ich aber den Array anzeigen will kommt da immer 0
ich muss doch dass noch irgendwie zuwseisen oder?
 
Die Zuweisung findet dort statt:

Code:
arZahlen[i-1]++;

Das Feld der Zufallszahl wird um 1 erhöht.

Alternativ kann man es auch so schreiben:

Code:
arZahlen[i-1] = arZahlen[i-1] + 1;

Aber das wurde ja schon weiter oben erwähnt.
 

Neue Beiträge

Zurück