Matryoshka

chillerStudent

Bekanntes Mitglied
Hallo,

ich muss folgende Hausaufgabe abgeben:
Schreiben Sie eine Klasse Matryoshka.java, so dass das folgende Programm
StartMatryoshka.java ausgeführt werden kann und die unten angegebene Ausgabe
liefert. Die Klasse StartMatryoshka.java darf nicht verändert werden.
Java:
class StartMatryoshka {
static final int N = 5;
public static void main(String[] args) {
Matryoshka m1 = new Matryoshka();
for (int i = 0; i < N; ++i) {
new Matryoshka((int) (Math.random() * 10) + 1);
}
Matryoshka m2 = new Matryoshka(5, "gelb");
Matryoshka m3 = new Matryoshka("rot");
m2.showMe();
Matryoshka.showSummary();
}
}

Bezüglich der Funktionalität soll folgendes gelten:
• Wenn eine Matroschka der Größe size erzeugt wird, so sollen automatisch auch alle
Kinder der Matroschka erzeugt werden. Ein Kind ist dabei je 2 cm kleiner als seine Mutter,
wobei die kleinsten Matroschkas 1 cm groß sind. Beim Erzeugen einer Matroschka der
Größe 5 cm sollen also automatisch auch Matroschkas der Größen 3 cm und 1 cm mit
angelegt werden. Kinder haben stets die gleiche Farbe wie ihre Mutter.
• Wenn beim Konstruktoraufruf keine Größe angegeben ist, so wird eine Matroschka der
Größe 1 cm erzeugt.
• Wenn beim Konstruktoraufruf keine Farbe angegeben ist, so wird eine zufällige Farbe
gewählt.
Verwenden Sie this und this(), soweit dies sinnvoll ist, und vermeiden Sie auch darüber
hinaus Code-Wiederholung. Achten Sie auf den sinnvollen Einsatz von Klassen- vs. Instanzvariablen
bzw. -methoden.


Mein Problem: Ich kann das leider nicht umsetzten. Ich finde kein Anfang. Ich weiß grad nicht mal welche variablen ich nehmen soll und wie ich die deklarieren soll.
 
Zuletzt bearbeitet von einem Moderator:
M

maki

Gast
*verschoben*

Mein Problem: Ich kann das leider nicht umsetzten. Ich finde kein Anfang. Ich weiß grad nicht mal welche variablen ich nehmen soll und wie ich die deklarieren soll.
Das ist Schade, denn dann ohne Eigeninitiative wirst du hier keine Hilfe bekommen.
 

Murray

Top Contributor
Allein aus dem Quelltext der StartMatryoshka-Klasse siehst Du doch schon eine ganze Menge:
a) die Klasse Matryoshka braucht einen Default-Konstruktor
b) die Klasse Matryoshka braucht einen Konstruktor mit einem int-Parameter
c) die Klasse Matryoshka braucht einen Konstruktor mit einem String-Parameter
d) die Klasse Matryoshka braucht einen Konstruktor mit einem int- und einem String-Parameter
e) die Klasse Matryoshka braucht eine Instanzmethode showMe()
f) die Klasse Matryoshka braucht eine Klassenmethode showSummary()

Lt. Aufgabenstellung sollen die Konstruktoren a)-c) bestimmte Werte für die fehlenden Paramter annehmen.

In der Aufgabenstellung wird sich dann noch auf eine Ausgabe bezogen, die Du noch nicht gepostet hast - aber das ist auch gut so, sonst macht dir noch jemand die Aufgabe einfach so fertig, ohne dass du selbst irgendwelche Initiative zeigst
 
S

SlaterB

Gast
was machst du denn wenn "rot" übergeben wird oder fehlt das auch noch?
du musst die Farben ja irgendwo haben, in einer Liste oder Map, dann eben per zufälligen Index wählen,
bzw. wenn es nur um Strings geht dann musst jetzt eben eine solche Liste anlegen
 

chillerStudent

Bekanntes Mitglied
Habe grad nachgefragt...
Es sollen nur drei Faben sein. So weit sind wir noch nicht;)

Hab das mit einer zufallszahl hinbekommen und ein paar if anweisungen geschrieben, thx
 

chillerStudent

Bekanntes Mitglied
Ich komm grad nicht weiter.
Wenn ich jetzt diesen Kontruktor geschrieben hab:
Java:
public Matryoshka(int size, String farbe){
        this.size=size;
        this.farbe=farbe;
        
        int a= (int)(Math.random()*3)+1;
        
        if(a==1){
            farbe="Blau";
            
        }
        else{
            if(a==2){
                farbe="Grün";
            }
            else{
                farbe="Gelb";
            }
        }
        System.out.println("Matroshka mit Groesse "+size+" cm und Farbe "+farbe+" erzeugt.");
        
    }

Wie kann ich denn jetzt diese zufällige farbe in einem standard konstruktor aufrufen?
Java:
public Matryoshka(){
        
        this(1, ???);
        
    }
 
S

SlaterB

Gast
in
> public Matryoshka(int size, String farbe){
brauchst du keinen Zufall,

ansonsten z.B. diesen Zufall-Farben Code in eine Methode getZufallFarbe() stecken und dann
Java:
public Matryoshka(){
        this(1, getZufallFarbe());
}
 

chillerStudent

Bekanntes Mitglied
ich bin jetzt fast schon fertig mit der aufgabe. Ich hänge grad nur an der showSummary methode.
ich hab das folgendermaßen geschrieben:
Java:
public static void showSummary(){
		if(a==1){
			blauzähler=blauzähler++;
		}
		else{
			if(a==2){
				rotzähler=rotzähler++;
			}
			else{
				gelbzähler=gelbzähler++;
			}
		}
		System.out.println("Es wurden "+blauzähler+" und "+rotzähler+" und "+gelbzähler);
	
	}

Er zählt leider nur einmal. Kann mir jemand weiterhelfen?
 

XHelp

Top Contributor
Die showSummary sollte ja auch nur das machen: anzeigen. Die Zählen solltest du z.B. im Konstruktor hochzählen, sonst ist es ja murks. Außerdem solltest du keine öäü in den Variablen verwenden.
 

chillerStudent

Bekanntes Mitglied
Hab das jetzt in dem Konstruktor eingefügt:
Java:
public Matryoshka(int size, String farbe) {
		this.size=size;
		this.farbe=farbe;
		System.out.println("Matroshka mit Groesse "+size+" cm und Farbe "+farbe+" erzeugt");
			
		for(int i=0; i<size; i++) {
			size=size-2;
			if(size<=0) {
				size=1;
			}
			else {
				System.out.println("Matroshka mit Groesse "+size+" cm und Farbe "+farbe+" erzeugt");
			}
		}
		if(a==1) {
			blauzaehler++;	
		}
		else {
			if(a==2) {
				rotzaehler++;
			}
			else {
				gelbzaehler++;
			}
		}	
	}

Und hab in der summary nur ein Out.println... geschrieben. trotzdem zählt er nur acht und nur in einer farbe. bei anderen farben ist 0
 

XHelp

Top Contributor
Was ist a? Warum steht da, dass etwas erzeugt wurde, obwohl es gar nichts erzeugt wurde? Aber mindestens geld sollte sich erhöhen. Der Fehler muss also woanders liegen
 

chillerStudent

Bekanntes Mitglied
a habe ich oben so deklariert:

Java:
public static int a= (int)(Math.random()*3)+1;
Die variable hilft mir mit den farben zufällig auszuwählen(in einer methode)
 

XHelp

Top Contributor
Die ist aber fehl am Platz bei der Farbauswertung. Außerdem bezweifle ich, dass du die überhaupt brauchst. Ansonsten mach dir jede Menge Sysouts rein und such den Fehler.
 

chillerStudent

Bekanntes Mitglied
Java:
class Matryoshka{

	public static int size;
	public static String farbe;
	public static int a= (int)(Math.random()*3)+1;
	static int rotzaehler=0, blauzaehler=0, gelbzaehler=0;

	public static void showMe() {
		String s = new String();
		s = "\n"+"Matroshka "+size+" cm in Farbe "+farbe+" mit Kind.";
		Out.println(s);
	}
	public Matryoshka() {
		this(1, getZufallsfarbe());
	}
	public Matryoshka(int size) {
		this(size, getZufallsfarbe());
	}
	public Matryoshka(String farbe) {
		this(1,farbe);
	}
	public Matryoshka(int size, String farbe) {
		this.size=size;
		this.farbe=farbe;
		System.out.println("Matroshka mit Groesse "+size+" cm und Farbe "+farbe+" erzeugt");
			
		for(int i=0; i<size; i++) {
			size=size-2;
			if(size<=0) {
				size=1;
			}
			else {
				System.out.println("Matroshka mit Groesse "+size+" cm und Farbe "+farbe+" erzeugt");
			}
		}
		if(a==1) {
			blauzaehler++;	
		}
		else {
			if(a==2) {
				rotzaehler++;
			}
			else {
				gelbzaehler++;
			}
		}	
	}
	public static String getZufallsfarbe() {
		String farbe;
		if(a==1) {
			farbe="Blau";
		}
		else {
			if(a==2) {
				farbe="rot";
			}
			else {
				farbe="Gelb";
			}
		}
		return farbe;
	}
	
	static void showSummary() {
		System.out.println("Es wurden "+rotzaehler+" rote "+gelbzaehler+" gelbe "+
blauzaehler+" blaue Matroschkas erzeugt.");
	}		
}
Bitte schön. Das ist meine Komplette klasse
 

XHelp

Top Contributor
Die Farbe ist nicht zufällig, sondern immer wieder die gleiche. Es ist recht offensichtlich, dass du bei getZufallsfarbe eine Zufallszahl erzeugen musst. Ansonsten gilt weiterhin: 1) a hat nichts im Konstruktor verloren 2) Sysouts (oder eben Debug-Funktion benutzen)
 

Neue Themen


Oben