FB18 - Das Forum für Informatik

fb18.de / Diplom Informatik / Unterbereich Grundstudium / Praktische Informatik

Loesungen fuer Aufgabe 4 (Wuerfel)

Loesungen fuer Aufgabe 4 (Wuerfel) 2002-02-25 03:00
Fred
Hier meine Loesung fuer die Wuerfelaufgabe.
Postet doch mal Eure Ansaetze. Bin gespannt.

public class Wuerfel { private java.util.Random myZufall; private int[] w; private int summe; public Wuerfel() { myZufall = new java.util.Random(); int i; w = new int[img]http://images.rapidforum.com/images/i6.gif[/img]; for (i=0; i<6; i++) { w[i] = 0; } summe = 0; } public int wuerfeln(int n, boolean ausgabe) { int i, letzter=0; for (i=0; i<n; i++) { letzter = myZufall.nextInt(6); w[letzter]++; if (ausgabe) { System.out.println(letzter+1); } } summe += n; return(letzter+1); } private String intBreite(int i, int breite) { String s = " " + i; return(s.substring(s.length()-breite)); } public void statistik() { int i; final float f = 100.0f / (float) summe; final float erwartung = 100.0f / 6.0f; float p; System.out.println("Augen | Haeufigkeit | Prozent"); System.out.println("-----------------------------"); for (i=0; i<6; i++) { p = f * w[i]; System.out.println(intBreite(i+1, 5) + intBreite(w[i], 14) + intBreite((int) p, 10)); } System.out.println("-----------------------------"); System.out.println("Gesamt: " + intBreite(summe, 11) + " 100"); } public static void main (String[] args) { final int ANZAHL = 100000; Wuerfel meinWuerfel = new Wuerfel(); meinWuerfel.wuerfeln(ANZAHL, false); meinWuerfel.statistik(); } }
Da wo der Smiley ist soll eigentlich eckige Klammer auf, eckige Klammer zu stehen.


Re: Loesungen fuer Aufgabe 4 (Wuerfel) 2002-02-25 09:44
Popcorn
? Woher kommt denn die Aufgabe? Ich dachte, dass was Ihr macht ist http://www.boku.ac.at/javaeinf/ ?


Re: Loesungen fuer Aufgabe 4 (Wuerfel) 2002-02-25 11:19
Zaphod
hmmm… also ich habe da jetzt nicht so genau reingeschaut, aber das was wir hier machen, habe ich unter der Adresse nicht gefunden…

Re: Loesungen fuer Aufgabe 4 (Wuerfel) 2002-02-25 14:26
Fred
Woher kommt denn die Aufgabe?
Habe ich mir von Labskaus schicken lassen :-)

Ich dachte, dass was Ihr macht ist http://www.boku.ac.at/javaeinf/ ?
Offenkundig nicht… dachte ich aber auch erst.

4) Umgang mit Zufallszahlen (Wuerfel):
Definieren Sie eine Klasse Wuerfel.
Benutzen Sie eine Instanz der Klasse java.util.Random;
deren Methode int nextInt(int n) liefert eine Zufallszahl zwischen 0 und n-1 vom Typ int.
- Geben Sie ANZAHL (Konstante definieren) Wuerfelzahlen aus
- definieren Sie Zaehlvariablen w1…w6, summe
- Ermitteln Sie die Haeufigkeit der Zahlen und geben Sie diese prozentual aus (for, if)

Wobei ich den Ansatz w1…w6 nicht so toll fand und stattdessen ein Array genommen habe.
Und fuer die Haeufigkeit der Zahlen braucht man auch nicht gerade ein if, aber was solls.


Re: Loesungen fuer Aufgabe 4 (Wuerfel) 2002-02-25 15:06
Popcorn
AAAAAAH. Na toll. Zaphod, haste mir auch ein Skript gesichert? Oh oh. Ich hoffe, dass Ihr dann nicht weit über das Thema rausfliegt. :L Na gut. Also dann probiere ich mich auch mal an dem Würfel-Projekt.

Re: Loesungen fuer Aufgabe 4 (Wuerfel) 2002-02-25 16:01
Faleiro
Dies ist schon mit den heutigen Modifikationen (Array, Histogramm):

(Ich hatte nicht genau auf den Aufgabentext geachtet – man sollte wohl zwei Würfel durch zwei getrennte Arrays darstellen usw. – dies stellt einfach einen zwölfseitigen Würfel dar. ;-))


import java.util.Random;

public class Wuerfel2
{
private static final int ANZAHL = 5;
private Random zufallsinstanz;
private int summe;
private int[] zaehler;

public Wuerfel2()
{
summe = 0;
zufallsinstanz = new Random();
zaehler = new int[] {0,0,0,0,0,0,0,0,0,0,0,0};
}

// Fuehrt einen einzigen Wurf aus, liefert den Wert und inkrementiert die Zaehler.
public int einEinzigerWuerfelwurf()
{
int wurf = zufallsinstanz.nextInt(12);
zaehler[wurf] = zaehler[wurf] + 1;
summe++;
return wurf + 1;
}

// Würfelt so oft wie als Argument angegeben.
public void sovieleWuerfeWieAngegeben(int wieoft)
{
System.out.println("\n");
for (int i = 1; i <= wieoft; i++)
System.out.println(einEinzigerWuerfelwurf());
}

// Wuerfelt so oft, wie die Konstante ANZAHL angibt.
public void mehrereWuerfelwuerfe()
{
System.out.println("\n");
for (int i = 1; i <= ANZAHL; i++)
System.out.println(einEinzigerWuerfelwurf());
}

// Rechnet aus, wieviel Prozent die gegebene Zahl von der Variable "summe" ist.
private double prozentVonDerSumme(int zahl)
{
return (double) zahl / (double) summe * 100;
}

public void gibStatistikenAus()
{
System.out.println("\n");
System.out.println("Insgesamt: " + summe + "\n");

for (int i = 1; i <= 12; i++)
{
System.out.println("(" + i + ") " + zaehler[i-1] + " " + prozentVonDerSumme(zaehler[i-1]) + " %");
System.out.print(" ");
for (int j = 1; j <= zaehler[i-1] ; j++)
System.out.print('*');
System.out.print("\n");
}
}
}



Zu deiner Lösung:

1. In deinem Konstruktor findet sich folgende merkwürdige Schleife:

for (i=0; i<6; i++) {
w = 0;
}

Du weist der Variablen "w" sechsmal hintereinander den Wert 0 zu?!

2. Was bedeutet "final"?


Re: Loesungen fuer Aufgabe 4 (Wuerfel) 2002-02-25 16:15
Fred
1. In deinem Konstruktor findet sich folgende merkwürdige Schleife:

for (i=0; i<6; i++) {
w = 0;
}

Du weist der Variablen "w" sechsmal hintereinander den Wert 0 zu?!
Es muss natuerlich w heissen.
So steht es auch in meinen Quelltext.
Da hat das Code-Tag wieder was geschluckt :-(
Warum macht das denn so komische Sachen?!?

2. Was bedeutet "final"?
Damit legt man Konstanten fest.


Re: Loesungen fuer Aufgabe 4 (Wuerfel) 2002-02-25 16:17
Fred
1. In deinem Konstruktor findet sich folgende merkwürdige Schleife:

for (i=0; i<6; i++) {
w = 0;
}

Du weist der Variablen "w" sechsmal hintereinander den Wert 0 zu?!
Ah, jetzt verstehe ich. Also, es heisst w, dann eckige Klammer auf, dann i, dann eckige Klammer zu.
Der interpretiert das als Anweisung, den Folgetext invers darzustellen. So ein Bullshit…



Re: Loesungen fuer Aufgabe 4 (Wuerfel) 2002-02-25 17:42
Faleiro
Achso!
Allerdings nicht "invers", sondern "italic", also kursiv. :-)

Hier im Forum ist Codeposterei wohl nicht so zweckmäßig.

Re: Loesungen fuer Aufgabe 4 (Wuerfel) 2002-02-25 21:03
Fred
Achso!
Allerdings nicht "invers", sondern "italic", also kursiv. :-)
Hier im Forum ist Codeposterei wohl nicht so zweckmäßig.
Ich waehre froh, wenn es dieses HTML-pre gaebe und sonst gar nichts. Ich koennte echt durchdrehen!!!


Re: Loesungen fuer Aufgabe 4 (Wuerfel) 2002-02-26 13:18
Popcorn
import java.util.Random; class MyWuerfel { int anzahl; void wurf() { int[] ergebniss = new int[ 7]; System.out.println("Okay, nun wird " + anzahl + "x mit einem W6 geworfen."); for (int i = 0; i < anzahl; i++) { Random r1 = new Random(i*21242); int w6 = (int)(r1.nextDouble() * +6); w6++; ergebniss[w6]++; } for (int i=1; i < 7; i++) { double runden = anzahl; double prozent = (100 / runden) * ergebniss[ i]; System.out.println("Die " + i + " wurde " + ergebniss[ i] + "mal gewürfelt. Das sind " + prozent + "Prozent."); } } public static void main (String arg[]) { MyWuerfel w = new MyWuerfel(); w.anzahl = Integer.parseInt(arg[ 0]); w.wurf(); } }
Narf. Aber immerhin funzt es. (java MyWuerfel Anzahl)