Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich bin ein blutiger Anfänger und habe ein kleines Problem. Zunächst einmal mein bisheriger Code:
Java:
import java.util.Random;
public class Wuerfel1{
Random zufall = new Random();
int wurf[] = new int[3];
public Wuerfel1(){
wuerfeln();
ausgabe();
}
public static void main(String[] args){
new Wuerfel1();
}
public void wuerfeln(){
for(int i=0; i<3; i=i+1)
wurf[i] = zufall.nextInt(0)+1;
}
public void ausgabe(){
for(int i=0; i<3; i=i+1)
System.out.println("Es wurde eine "+wurf[i] +" gewürfelt.");
System.out.println("Ergebnis: " +augensumme());
}
public int augensumme(){
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:
public class Wuerfel1{
Random zufall = new Random();
int wurf[][] = new int[100][3];
public Wuerfel1(){
wuerfeln();
ausgabe();
}
public static void main(String[] args){
new Wuerfel1();
}
public void wuerfeln(){
for(int s = 0; s < 100; s++) {
for(int i=0; i<3; i++) {
wurf[s][i] = zufall.nextInt(6)+1;
}
}
}
public void ausgabe(){
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));
}
}
}
public int augensumme(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.
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>
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:
31 for(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;
}