Java Quadrat Aufgabe

insXicht

Lt. Commander
Registriert
Mai 2011
Beiträge
1.095
Hallo cb-Community

Ich habe folgende Aufgabe zu lösen:

Erstellen Sie eine Klasse Quadrat im Paket geo des Projektes ErsteSchritte. Jedes
Quadrat hat eine X/Y-Startkoordinate, eine Seitenlänge in cm, eine Liniendicke in mm, eine
Linienfarbe und eine Füllfarbe. Erstellen Sie 4 sinnvolle Konstruktoren unter Vermeidung von
redundantem Quellcode sowie die notwendigen getter und setter. Überschreiben Sie die Methoden
toString und equals von Object unter Angabe der Annotation @Override. Die Linienfarbe und
Füllfarbe werden als String gespeichert, wobei nur „grün“, „blau“, „schwarz“ und „gelb“ zugelassen
sind. Prüfen Sie die Gültigkeit der Farben in einer einzigen Bedingung und werfen Sie im Fehlerfall
eine RuntimeException mit passender Fehlermeldung. Ein Quadrat-Objekt muss zu jedem
Zeitpunkt in einem gültigen Zustand sein, ansonsten ist eine RuntimeException mit passender
Fehlermeldung zu werfen!

Ich habe die Aufgabe nicht 1:1 umgesetzt und beispielsweise die Farben nicht als String angegeben sondern als RGB-Werte, da dass meiner Meinung nach mehr Sinn macht.
Allerdings scheine ich noch irgendwas ziemlich falsch zu machen.
Mein Quellcode sieht bisher folgendermaßen aus:

Code:
package geo;

public class Quadrat {

	// Eigenschaften jedes Quadrates	
	private int x; 				// x-Koordinate
	private int y; 				// y-Koordinate
	private int seitenlaenge; 	// Seitenlaenge
	private int liniendicke; 	// Liniendicke
	private int linienfarbe; 	// Linienfarbe(RGB-Wert)
	private int fuellfarbe;		// Fuellfarbe(RGB-Wert)
	
	
	//Standartwerte für die Quadratvariablen
	public Quadrat() {
		this.x = 0;
		this.y = 0;
		this.seitenlaenge = 1;
		this.liniendicke = 1;
		this.linienfarbe = 0;
		this.fuellfarbe = 0;
	}
	
	//Konstruktor für ein Quadrat mit Angabe von Koordinaten
	public Quadrat(int xK, int yK) {
		this();
		this.setKoord(xK, yK);
	}
	
	//Konstruktor für ein Quadrat mit Angabe von Seitenlänge und Liniendicke
	public Quadrat(int dicke, int laenge) {
		this();
		this.setDicke(dicke);
		this.setLaenge(laenge);
	}
	
	//Konstruktor für ein Quadrat mit Angabe von Linien- und Füllfarbe
	public Quadrat(int lfarbe, int ffarbe) {
		this();
		this.setLfarbe(lfarbe);
		this.setFfarbe(ffarbe);
	}
	
	//Konstruktor für ein Quadrat mit allen Angaben
	public Quadrat(int xK, int yK, int dicke, int laenge, int lfarbe, int ffarbe) {
		this();
		this.setKoord(xK, yK);
		this.setDicke(dicke);
		this.setLaenge(laenge);
		this.setLfarbe(lfarbe);
		this.setFfarbe(ffarbe);
	}
 	
//Setter	
	//Die gewünschten Koordinaten werden an die Variable weitergeleitet
	public void setKoord(int xK, int yK) {
		this.x = xK;
		this.y = yK;
	}
	
	//Die gewünschte Liniendicke wird an die Variable weitergeleitet
	public void setDicke(int dicke) {
		if (dicke <= 0) {
			throw new RuntimeException("Liniendicke ungültig !");
		}
		this.liniendicke = dicke;
	}
	
	//Die gewünschte Seitenlaenge wird an die Variable weitergeleitet
	public void setLaenge(int laenge) {
		if (laenge <= 0) {
			throw new RuntimeException("Linienlaenge ungültig !");
		}
		this.seitenlaenge = laenge;
	}

	//Die gewünschte Linienfarbe(RGB-Wert) wird an die Variable weitergeleitet
	public void setLfarbe(int lfarbe) {
		if (lfarbe == 000255000) {
			this.linienfarbe = lfarbe;
		}
		else if (lfarbe == 000000255) {
			this.linienfarbe = lfarbe;
		}
		else if (lfarbe == 000000000) {
			this.linienfarbe = lfarbe;
		}
		else if (lfarbe == 25525500) {
			this.linienfarbe = lfarbe;
		}
		else
			throw new RuntimeException("Linienfarbe ungültig");
	}
	
	//Die gewünschte Fuellfarbe(RGB-Wert) wird an die Variable weitergeleitet
	public void setFfarbe(int ffarbe) {
		if (ffarbe == 000255000) {
			this.fuellfarbe = ffarbe;
		}
		else if (ffarbe == 000000255) {
			this.fuellfarbe = ffarbe;
		}
		else if (ffarbe == 000000000) {
			this.fuellfarbe = ffarbe;
		}
		else if (ffarbe == 25525500) {
			this.fuellfarbe = ffarbe;
		}
		else
			throw new RuntimeException("Fuellfarbe ungültig"); 
	}
//end Setter	
	
//Getter
	public int getX() { return this.x; }
	public int getY() { return this.y; }
	public int getDicke() { return this.liniendicke; }
	public int getLaenge() { return this.seitenlaenge; }
	public int getLfarbe() { return this.linienfarbe; }
	public int getFfarbe() { return this.fuellfarbe; }
//end Getter	
	
}

Ich erwarte keine fertige Lösung, ich hoffe einfach nur auf etwas Hilfe damit ich weiterkomme.
Danke im Vorraus.

lg insXicht
 
Da du keine Fehler oder sonstiges erwähnst (oder ich sie in der schnelle übersehen habe) rate ich mal ins Blaue:

Code:
public void setLaenge(int laenge) throws RuntimeException {
if (laenge <= 0) {
throw new RuntimeException("Linienlaenge ungültig !");
}
this.seitenlaenge = laenge;
}

Wichtig ist das "throws RuntimeException".
 
wenn in der Vorgabe steht du sollst nur „grün“, „blau“, „schwarz“ und „gelb“ zulassen dann solltest es vielleicht auch so machen
 
Ich habe die Farben ja nur durch ihre RGB Werte ersetzt.
 
Hätte noch einen Verbesserungsvorschlag betreffend Konstruktoren...
Die redundanten Funktionsaufrufe in den Konstruktoren sind nicht sehr schön...
Besser einen Konstruktor mit allen Parameter, die anderen rufen alle diesen Konstruktor auf, oder auch verschachtelt.

Bsp:

Code:
Konstruktor(int val1, int val2, int val3){
   par1 = val1;
   par2 = val2;
   par3 = val3;
}

Konstruktor(int val1, int val2){
   this(val1,val2,0);
}

Konstruktor(int val1){
   this(val1,0);
}

So habe ich das zumindest gelernt...



Finde das mit den Farben als String auch nicht so der bringer, aber so ist nun die Aufgabe.
Ausserdem steht da ja "...Prüfen Sie die Gültigkeit der Farben in einer einzigen Bedingung...", du prüfst aber durch mehrere Bedingungen...

Code:
public void setLfarbe(int lfarbe) {
if (lfarbe == "grün" || lfarbe == "blau" || lfarbe == "schwarz" || lfarbe == "gelb") {
    this.linienfarbe = lfarbe;
}
else
{
 // Fehlerwerfen...
}
 
Zuletzt bearbeitet:
eclipse zeigt mir bei den mittleren 3 Kontruktoren einen Fehler an

duplicate method Quadrat(int, int) in type Quadrat

welchen ich nicht versteh.
 
Das Liegt daran, dass die Signaturen der Konstruktoren gleich sind. Sie haben alle den gleichen Namen und haben zwei Integer als Parameter. Wenn jetzt zur Laufzeit ein Konstruktor aufgerufen wird, z.b.: Quadrat(5,6) hat der Compiler keine ahnung welchen Konstruktor er benutzen soll.
 
Die Fehlermeldung ist doch ziemlich eindeutig. Du verwendest Konstruktoren mit der gleichen Signatur.

Quadrat(int x, int y) und
Quadrat(int i, int j)

führt logischerweise zu einer Fehlermeldung. Woher soll Java wissen, welcher Konstruktor verwendet werden soll? Entweder musst Du zwei Konstruktoren mit der gleichen Signatur entfernen oder ändern.
Z.B.:
Quadrat(int x, int y)
Quadrat(String x, String y)
Quadrat(int x, int y, int color)...
 
Kleiner Nachtrag noch: In der Aufgabe steht, du sollt die Farbcodes in einer EINZIGEN Bedingung prüfen, du benutzt allerdings mehrere. Denke mal da soll auf logische operatoren eingegangen werden '||' und '&&' benutzen!
 
Ok Konstruktorenproblem wäre gelöst:

Code:
//Standartwerte für die Quadratvariablen
	public Quadrat() {
		this.x = 0;
		this.y = 0;
		this.seitenlaenge = 1;
		this.liniendicke = 1;
		this.linienfarbe = 000000000;
		this.fuellfarbe = 000000000;
	}
	
	//Konstruktor für ein Quadrat mit Angabe von Koordinaten
	public Quadrat(int xK, int yK) {
		this();
		this.setKoord(xK, yK);
	}
	
	//Konstruktor für ein Quadrat mit Angabe von Seitenlänge und Liniendicke
	public Quadrat(int xK, int yK, int dicke, int laenge) {
		this();
		this.setKoord(xK, yK);
		this.setDicke(dicke);
		this.setLaenge(laenge);
	}
	
	//Konstruktor für ein Quadrat mit Angabe von Linien- und Füllfarbe
	public Quadrat(int xK, int yK, int dicke, int laenge, int lfarbe, int ffarbe) {
		this();
		this.setKoord(xK, yK);
		this.setDicke(dicke);
		this.setLaenge(laenge);
		this.setLfarbe(lfarbe);
		this.setFfarbe(ffarbe);
	}
Ergänzung ()

Die Sache mit den Farben macht mir allerdings noch Probleme, ich hab im momten keine Idee
wie ich das ganze mit Strings umsetzen soll.
 
insXicht schrieb:
Die Sache mit den Farben macht mir allerdings noch Probleme, ich hab im momten keine Idee
wie ich das ganze mit Strings umsetzen soll.
Wo ist das Problem? Du hast es doch quasi schon mit ints umgesetzt. Mach halt einfach Strings draus und aendere die Ueberpruefung so ab, dass sie der Aufgabenstellung entspricht.

Kleiner Hinweis noch: Vielleicht waere es eine gute Idee, eine Liste der gueltigen Farben zu haben. Es geht aber auch ohne.
 
Problem macht mir momentan noch die Überprüfung.

Code:
if (Farbe != ("grün" || "blau" || "rot")) { throw RuntimeException("Farbe ungültig!") }
so funktionierts leider nicht.
 
Code:
if(Farbe != "grün" && Farbe != "blau" && Farbe != "rot")
bzw. besser, wie Shagg schon geschrieben hat, mit equals:
Code:
if(!Farbe.equals("grün") && !Farbe.equals("blau") && !Farbe.equals("rot"))
 
Zuletzt bearbeitet:
Ach verdammt, warum bin ich nicht selbst drauf gekommen, Danke sasdensas
 

Ähnliche Themen

Antworten
3
Aufrufe
1.166
Antworten
12
Aufrufe
1.714
R
Antworten
2
Aufrufe
996
K
  • Gesperrt
Antworten
5
Aufrufe
1.062
Zurück
Oben