Ich bin ein blutiger Anfänger und habe ein kleines Problem. Zunächst einmal mein bisheriger Code:
Java:
importjava.util.Random;publicclassWuerfel1{Random zufall =newRandom();int wurf[]=newint[3];publicWuerfel1(){wuerfeln();ausgabe();}publicstaticvoidmain(String[] args){newWuerfel1();}publicvoidwuerfeln(){for(int i=0; i<3; i=i+1)
wurf[i]= zufall.nextInt(0)+1;}publicvoidausgabe(){for(int i=0; i<3; i=i+1)System.out.println("Es wurde eine "+wurf[i]+" gewürfelt.");System.out.println("Ergebnis: "+augensumme());}publicintaugensumme(){return(wurf[0]+ wurf[1]+ wurf[2]);}}
So dieses Programm würfelt jetzt quasi einmal mit drei Würfeln. Die einzelnen Würfelergebnisse werden ausgegeben. Dann werden diese drei Zahlen zusammengezählt und auch ausgegeben. Mein Problem ist jetzt, dass ich dieses Programm noch so erweitern möchte, dass man mehrmals mit drei Würfeln würfelt, also meinetwegen 100x und die jeweiligen Augensummen der Dreierwürfe gezählt werden.
D.h.
Ich würfel
6,2,4 A: 12 //Soweit das bisherige Programm
dann aber halt mehrmals:
2,5,2 A: 9
1,6,5 A: 12
usw.
Dann soll ausgegeben werden wie oft jede Augensumme kam, also: 3 = 0, 4 = 0........9 = 1.......12 = 2......
Ich hoffe ihr habt mein Problem verstanden und haltet ein paar Tipps für mich bereit. Vielen Dank schonmal im Vorraus.
Wenn du von vornherein die Anzahl der Würfel-"serien" kennst, kannst du einfach aus deinem eindimensionalen ein zweidimensionales Array machen. Der erste Index gibt dann z.B. die Nummer der Serie an, und der zweite Index die Nummer des Wurfs innerhalb der Serie:
(ungetestet)
Java:
publicclassWuerfel1{Random zufall =newRandom();int wurf[][]=newint[100][3];publicWuerfel1(){wuerfeln();ausgabe();}publicstaticvoidmain(String[] args){newWuerfel1();}publicvoidwuerfeln(){for(int s =0; s <100; s++){for(int i=0; i<3; i++){
wurf[s][i]= zufall.nextInt(6)+1;}}}publicvoidausgabe(){for(int s =0; s <100; s++){System.out.println("Serie "+(s+1)+":");for(int i=0; i<3; i++){System.out.println("Es wurde eine "+wurf[s][i]+" gewürfelt.");System.out.println("Ergebnis: "+augensumme(s));}}}publicintaugensumme(int serie){return(wurf[serie][0]+ wurf[serie][1]+ wurf[serie][2]);}}
Hi, erstmal vielen Dank für deine Antwort. Das System mit den mehrdimensionalen Arrays habe ich jetzt halbwegs verstanden. Der Code war auch bis auf zwei Fehler, die ich beheben konnte, korrekt. Es klappr alles soweit, bloß ich möchte ja die einzelnen Ergebnisse noch zusammenzählen. Also wie oft z.B. eine 11 als Augensumme nach den Hundert Dreier Würfen geworfen wurde.
int[] haeufigkeit =newint[37];//36 ist maximale Summefor(int s =0; s <100; s++){
haeufigkeit[augensumme(s)]++;}for(int i =3; i <=36; i++){System.out.println("Augensumme "+ i +" wurde "+ haeufigkeit[i]+"-mal geworfen");}
Ok, vielen vielen Dank, das Ergebnis kann sich sehen lassen. Es wird ohne Probleme compiliert und es funktioniert alles. Danke!
Wenn ich das Programm ausführe kommt am Ende:
Exception in thread "main" .java.lang.ArrayIndexOutOfBoundsException: 19
at Wuerfel1.ausgabe<Wuerfel1.java:36>
at Wuerfel1.<init><Wuerfel1.java:10>
at Wuerfel1.main<Wuerfel1.java:14>
importjava.util.Random;publicclassWuerfel1{Random zufall =newRandom();int wurf[][]=newint[100][3];publicWuerfel1(){wuerfeln();ausgabe();}publicstaticvoidmain(String[] args){newWuerfel1();}publicvoidwuerfeln(){for(int s =0; s <100; s++){for(int i=0; i<3; i++){
wurf[s][i]= zufall.nextInt(6)+1;}}}publicvoidausgabe(){for(int s =0; s <100; s++){System.out.println("Serie "+(s+1)+":");for(int i=0; i<3; i++){System.out.println("Es wurde eine "+wurf[s][i]+" gewürfelt.");System.out.println("Ergebnis: "+augensumme(s));}}int[] haeufigkeit =newint[19];for(int s =0; s <100; s++){
haeufigkeit[augensumme(s)]++;}for(int i =3; i <=19; i++){System.out.println("Augensumme "+ i +" wurde "+ haeufigkeit[i]+"-mal geworfen");}}publicintaugensumme(int serie){return(wurf[serie][0]+ wurf[serie][1]+ wurf[serie][2]);}}
Also eigentlich existiert der Array zu diesem Zeitpunkt schon oder nicht?
int[] haeufigkeit = new int[19]; reserviert Platz für 19 Werte, nämlich die Indizes 0,1,...,18
Wenn du auf index 19 zugreifen willst, meckert er natürlich. Also for(int i = 3; i < 19; i++) schreiben.
OT- Wie bin ich eigentlich auf 36 gekommen? Oh Mann, ich brauch Urlaub....
Ok jetzt läuft alles, vielen vielen Dank.
Ja das mit 36 passier, also bei mir bist du freigestellt, d.h. du kannst jetzt gerne in deinen wohlverdienten Urlaub fahren
Japan, ja da werde ich irgendwann auch nochmal meinen Urlaub verbringen.
Hab mir die Ausgabe jetzt noch mal genauer angeguckt und hätte noch zwei Fragen:
1. Warum beginnt er bei Serie 61. Also er erzeugt 40 Augensummen, kommt am Ende bei der Endausgabe auf genau 100. Der Code ist immer noch derselbe wie oben.
2. Kannst du mir diesen Teil bitte genauer erklären, kann mir das nicht ganz genau erklären.
Java:
31for(int s =0; s <100; s++){32 haeufigkeit[augensumme(s)]++;
Japan, ja da werde ich irgendwann auch nochmal meinen Urlaub verbringen.
Hab mir die Ausgabe jetzt noch mal genauer angeguckt und hätte noch zwei Fragen:
1. Warum beginnt er bei Serie 61. Also er erzeugt 40 Augensummen, kommt am Ende bei der Endausgabe auf genau 100. Der Code ist immer noch derselbe wie oben.
OK, wir haben das Häufigkeiten-Array, am Anfang voller Nullen. Jetzt gehe ich alle Augensummen durch. Sagen wir, die erste Augensumme ist 11. Dann erhöhe ich das elfte Feld im Häufigkeiten-Array um eins. Ausführlich hätte ich auch schreiben können:
Java:
for(int s =0; s <100; s++){int sum =augensumme(s);
haeufigkeit[sum]= haeufigkeit[sum]+1;}