Informatik-Felder

Aus RSG-Wiki
Wechseln zu: Navigation, Suche

Wir haben zuletzt eine Methode in der Klasse Spielautomat geschrieben, mit der wir die Anzahl der Hauptgewinne gezählt haben.
Dazu haben wir bei den Attributen ein Feld gewinn vereinbart
 private int[] gewinn;
Zusätzlich haben wir ein neues Attribut spielezahl vereinbart
 private int spielezahl;.
Im Konstruktor haben wir das Feld mit 1000 Zellen erzeugt.
 gewinn = new int[1000];
und den Wert der Variablen spielezahl auf 0 gesetzt
 spielezahl = 0;
In der Methode spiele() wurde für jedes Spiel in eine Zelle des Feldes gewinn ein Eintrag mit dem Gewinn gemacht. Dabei wurde jeder Zelle eine Nummer von 0 bis 999 zugewiesen.  public void spiele()
{setzeFarbmuster(zufall.nextInt(9),zufall.nextInt(9),zufall.nextInt(9));
gewinn[spielezahl] = ermittleGewinn();
spielezahl = spielezahl + 1;}


Bearbeite nun in BlueJ folgende Aufgaben:


Bleistift 35fach.jpg   Aufgabe 1

Schreibe eine Methode berechneMittel(), die den mittleren Gewinn pro Spiel zurückgibt. Welchen Ergebnistyp sollte diese Methode haben?

public double berechneMittel()
{
int summe = 0;
for(int i = 0; i<= spielezahl - 1; i++)
{
summe = summe + gewinn[i];
}
return 1.0*summe/spielezahl;

}


Bleistift 35fach.jpg   Aufgabe 2

Schreibe Methoden zaehleKleingewinne() und zaehleVerluste(), die die Anzahl der kleinen Gewinne bzw. der verlorenen Spiele zurückgeben.

Methode zaehlerKleingewinne()
public int zaehleKleingewinn()
{
int zaehler = 0;
for(int i = 0; i<= spielezahl - 1; i++)
{
if (gewinn[i] == 2)
{zaehler = zaehler + 1;}
}
return zaehler;
} Methode zaehleVerluste()
public int zaehleVerlust()
{
int zaehler = 0;
for(int i = 0; i<= spielezahl - 1; i++)
{
if (gewinn[i] == 0)
{zaehler = zaehler + 1;}
}
return zaehler;

}


Bleistift 35fach.jpg   Aufgabe 3

Schreibe eine Methode spiele(int zahl), die die Methode spiele() so oft aufruft, wie es dem Wert des Parameters zahl entspricht, und anschließend die Statistik mithilfe der vorstehenden Methoden auf der Konsole ausgibt.

public void spieleAnzahl(int Anzahl)
{
for(int i = 1; i<=Anzahl;i++)
{
spiele();
}
System.out.println("Bei "+Anzahl + " Spielen hast du: ");
System.out.println("Hauptgewinne: "+zaehleHauptgewinn() + " Kleingewinne: "+zaehleKleingewinn()+ " kein Gewinn: " + zaehleVerlust());

}


In alle 4 Methoden konnte man die Einträge aus dem Feld gewinn[] verwenden. Man musste also bei den Attributen und im Konstruktor nichts hinzufügen.


Bleistift 35fach.jpg   Aufgabe 4

Dich interessiert wie oft die Farbe blau (blau hat die Farbnummer 1) bei der ersten Walze vorkommt.
a) Beschreibe in 2-3 Sätzen mit Hilfe eines Feldes eine Untersuchungsmethode, mit der du feststellen kannst, wie oft die Farbe rot bei der ersten Walze vorkommt.
b)Das Feld wird bei den Attributen durch private int[] blau deklariert.
Gib den für die Funktionsweise des Feldes nötigen Eintrag im Konstruktor der Klasse an.
c) In der Methode spiele() ist die Zeile
if (z1==4){blau[spielezahl]=1;}else{blau[spielezahl]=0;};
eingefügt. Was bewirkt diese Zeile? (z1 gibt die Farbe der Walze 1 an.)

a) Für die Walze wird ein Feld eingerichtet blau[] vereinbart.
Bei jedem Spiel wird nachgesehen ob die Walze die Farbe blau hat und ihr Feld bekommt für dieses Spiel den Eintrag 1.
Auf Abfrage abfrageFarbeblau() wird bei jeder Walze gezählt wie oft die Farbe rot vorgekommen ist und die Zahlen werden ausgegeben.
b) Konstruktor: blau = new int[1000];
Es wird ein Feld-Objekt mit den Speicherplätzen blau[0] bis blau[999] erzeugt.

c) Für jedes Spiel wird nun mit 1 notiert ob die Walze 1 die Farbe blau hat, wenn sie nicht blau ist wird 0 in die Zelle eingetragen.


Bleistift 35fach.jpg   Aufgabe 5

Dich interessiert nun wirklich wie oft die Farbe blau bei der ersten Walze vorkommt. Entwickle mit Hilfe eines Feldes eine Untersuchungsmethode, vervollständige den Quelltext von SPIELAUTOMAT und schreibe eine Methode abfrageFarbeblau() , mit der du feststellen kannst wie oft die Farbe blau bei der ersten Walze vorkommt.

1. Bei den Attributen vereinbart man ein Ganzzahlfeld blau.
private int[] blau;
2. Im Konstruktor erzeugt man dieses Feldobjekt mit 1000 Speicherplätzen.
blau = new int[1000];
3. In der Methode spiele wird bei der Walze 1 nachgeschaut ob sie die Farbe blau hat. Wenn ja gibt es in der Feldzelle für diese Spielenummer den Eintrag 1, ansonsten bei den anderen Farben den Eintrag 0,
if (z1==1){blau[spielezahl]=1;}else {blau[spielezahl]=0;};
4. Mit der Methode abfrageFarbeblau() wird nun nachgeschaut wie oft der Eintrag 1 in den Feldzellen des Ganzzahlenfeldes blau vorhanden ist.
public int angabeFarbeBlau()
{
int zaehler = 0;
for (int i = 0; i<spielezahl; i++)
{
if (blau[i]==1)
{
zaehler = zaehler + 1;
}
}
return zaehler;

}

Neu.jpg


Bleistift 35fach.jpg   Aufgabe 6

a) Erweitere die Methode von Aufgabe 5, indem du untersuchst, ob die Farbe blau bei allen drei Walzen etwa gleich oft vorkommt.
b) Wir haben 9 Farben. Wenn man 450 mal spielt erwartet man die Farbe blau in etwa 50 Spielen bei einer Walze. Überprüfe ob das stimmt.

Beide Aufgaben kann man mit dieser Methode lösen:

public void abfrageFarbeBlau3Walzen()
{
int zaehler1 = 0; //Zähler für Walze 1
int zaehler2 = 0; //Zähler für Walze 2
int zaehler3 = 0; //Zähler für Walze 3
for (int i = 0; i<spielezahl; i++)
{
if (blau[i]==1)
{
zaehler1 = zaehler1 + 1;
}
if (blau2[i]==1)
{
zaehler2 = zaehler2 + 1;
}
if (blau3[i]==1)
{
zaehler3 = zaehler3 + 1;
}
}
System.out.println("Farbe blau bei linker Walze: " + zaehler1 + " mittlere Walze: "+ zaehler2 + " rechte Walze: "+zaehler3);
}

Man muss die Felder blau2[] und blau3[] bei den Attributen vereinbaren und im Konstruktor insistieren.

Für a) ruft man die Methode einfach auf.

Um b) zu testen, spielt man vorher z.B. 450 mal (Methode public void spieleAnzahl(int Anzahl) aufrufen und für Anzahl 450 eingeben) und mit obiger Methode dann schauen, ob bei allen drei Walzen Werte um die 50 herauskommen.


Bleistift 35fach.jpg   Aufgabe 7