Rechteck

Hallo,

ich habe von der Uni aus eine Hausarbeit und habe schon über die Hälfte geschafft, aber jetzt komme ich nicht mehr weiter :confused:
Hier erst einmal die Aufgabe:

  • Schreiben Sie zwei Instanzmethoden,shift und lift, die in Analogie zu den,Methoden der Klasse Punkt das gesamte,Rechteck waagerecht bzw. senkrecht,verschieben.
  • Schreiben Sie außerdem die Instanzmethoden
    showA, showB, showC, showD, showBreite, showHoehe sowie showFlaeche, welche die Eckpunkte A, B, C bzw. D sowie die Länge, die Breite bzw. die Fläche des Rechtecks in geeigneter Weise auf der Konsole zur Anzeige bringen.
    Schreiben Sie nun noch eine Klasse namens Rechtecktest, deren main- Methode unter Nutzung der Klasse RechteckDi
  • eine Instanz der Klasse RechtechDi erzeugt,
  • das erzeugte Rechteck zunächst senkrecht, dann waagerecht verschiebt
  • und anschließend die Koordinaten der Eckpunkte des Rechtecks sowie
    dessen Länge, Breite und Fläche auf der Konsole anzeigt.

Da ich die letzten 2 Wochen im Krankenhaus lag, musste ich mir den Stoff selber beibringen und bin froh, dass ich den folgenden Code hinbekommen habe :smiley:


public class RechteckDi {
	
	private Punkt a;
	private double breite;
	private double hoehe;
		
	public RechteckDi(){
		System.out.println("Erzeugen eines Rechtecks");
		System.out.println("1. Festlegen des Eckpunktes A");
		this.a = new Punkt();
		System.out.println("Wie breit ist das Rechteck?");
		this.breite = EAM.rDouble();
		System.out.println("Wie hoch ist das Rechteck?");
		this.hoehe = EAM.rDouble();
	}
	public Punkt getA() {
		return a;
	}
	public double getBreite() {
		return breite;
	}
	public double getHoehe() {
		return hoehe;
	}
}	```

Wäre wirklich nett, wenn mir jemand einen Ansatz bzw ein paar Hilfestellungen geben könnte, damit ich den letzten Rest auch noch schaffe :(

Danke schon einmal im voraus :)

wo bleibst du konkret stecken?
eine riesige Aufgabe mit zig offnene Methoden, da kann man erschlagen werden und allein schon die Übersicht verlieren,

aber konkret einzeln, etwa Methode showA(),
ob da deine getA()-Methode reicht oder showA() mit Ausgabe noch dazukommt, musst du entscheiden,
weist du was eine Ausgabe ist? (in main-Methode ja schon dabei) warum noch nicht programmiert :wink: ,
zumindest eine Variante, muss ja nicht sofort richtig sein, sonst Verbannung, welches konkrete Problem?

oder die shift-Methode, mache dir nochmal klar was genau die leisten soll, denke dir ein Beispiel mit vorher/ nachher aus,
welchen Attributen-Inhalten entspricht das im Programm,
was weniges muss die Methode also leisten?
an welcher Stelle enden deine Gedanken an Übersetzung in Java, oder noch an der Mathematik/ Geometrie an sich?

edit: für Klasse Punkt soll es die ja auch schon geben, bekannt? dann ja noch mächtige Hilfe

usw.

Standardhinweis:
verzichte übrigens auf Benutzereingaben, willst du nicht zigmal neu eintippen,
this.breite = 4; als Beispiel reicht völlig,
später wenn alles fertig, dann vielleicht die Benutzereingabe, welche im geposteten Aufgabentext allerdings auch nicht steht

edit:
kein Antwort-Posting nach der Frage in einem früheren ersten Thread
http://forum.byte-welt.net/sonstiges/hausaufgaben/13183-darlehen-restschulden-berechnen.html
bei so viel Hilfe damals ist keine Empfehlung für dich, Besserung?

Hallo,

jaa, das mit dem damaligen Post tut mir jetzt auch leid, bzw. ich habe in mehreren Foren nach Hilfe gefragt und das hier total vergessen, aber jetzt habe ich mich auf dieses eingespielt, da ich hier bis jetzt am meisten gelernt habe.
Und vielen Dank auch schon einmal für deine Antwort.
Die Klasse Punkt ist natürlich vorhanden


public class Punkt {

	private	double x ;
	private double y;
	
	public Punkt(double x, double y){
		this.x = x;
		this.y = y;
	}
	public Punkt(){
		System.out.println("Erzeugen einer Instanz der Klasse Punkt");
		System.out.println("geben Sie die x-Koordinate des Punktes an:");
		this.x = EAM.rDouble();
		System.out.println("geben Sie die y-Koordinate des Punktes an:");
		this.y = EAM.rDouble();
	}
	public double getX() {
		return x;
	}
	public double getY() {
		return y;
	}
	
	public void shift(double weite){	
			x = x + weite;
	}
	
	public void lift(double weite){
			y = y + weite;
}
}```

Habe mich jetzt an den ersten Teil gesetzt, wo ich das komplette Rechteck verschieben soll. Schreiben Sie zwei Instanzmethoden
shift und lift, die in Analogie zu den
Methoden der Klasse Punkt das gesamte
Rechteck waagerecht bzw. senkrecht
verschieben.

```	public void shift(double weite){
		a.shift(weite);
	}
	
	public void lift(double weite){
		a.lift(weite);
	}```

Das mit "a" denke ich ist richtig, aber was soll ich mit Breite und Höhe machen? Bzw. breite.shift(breite); funktioniert ja nicht :/

wie gesagt, Beispiele aufmalen, was soll passieren?
aber um mal nicht nur dämliche Rückfragen zu formulieren das offensichtliche:
Verschiebung des Punktes reicht, am neuen Punkt gleiche Breite ist richtig,

wenn du es dir aber nicht aufmalst und selber erklärst musst du darauf vertrauen dass ich es richtig weiß,
auch nicht Optimum

soweit sogut also, viel Arbeit ist es offensichtlich auch nicht :wink:

ok, dann passte das ja schonmal :smiley:
Aber irgendwie stehe ich beim Mathematischen denken gerade auf dem Schlauch >.<
Habe es mir schon auf ein Blatt Papier gemalt aber irgendwie kommt da nichts sinnvolles raus. Da wo ich die Eckpunkte a,b,c,d brauche, Also showA(), showB() und so weiter. Wie kann ich diese Punkte berechnen?
Ich habe ja gegen den A Eckpunkt, Breite, Hoehe, x und y Koordinate?
Hätte ich die Eckpunkte A und C, dann wäre das kein Problem für mich, aber so stehe ich irgendwie aufm Schlauch :frowning:

Ein Rechteck ist natürlich durch einen einzelnen Punkt sowie Breite und Höhe noch überhaupt nicht von der Lage her im Raum definiert. Aber mal angenommen, dass das Rechteck “waagerecht” in einer Ebene liegt und A der untere linke Punkt ist, lässt sich doch recht einfach errechnen, wo die anderen Punkte liegen müssen.

Zeichne dir doch einfach mal ein Rechteck auf, dessen Punkt A auf x=1 und y=2 liegt und die Breite 3 und die Höhe 4 hat. Wo liegen die Punkte?

dann wäre B(3/2) C(3/6) und D(1/6)

Also wäre mein PunktB also showB() nur die Breite des Rechteckes?

Bei der x-Koordinate von B und C hast du dich vertan. Das müsste jeweils 4 sein, sonst ist das Rechteck nur 2 Einheiten breit.
Für showB() wäre eine geeignete Ausgabe “B(4/2)” oder etwas mathematischer “B(4 | 2)”, denn es soll schließlich der Eckpunkt ausgegeben werden.

jaa das mit B und C habe ich eben selber gemerkt, habe falsch gezählt :smiley:
Also für showA() ist der Code ja: public void showA(){ System.out.println("Punkt A("+a.getX()+"|"+a.getY()+")."); }

Weil ich da ja einfach die x und y Koordinaten nehmen kann.
Aber wie schreibe ich das in Java für showB(), weil wenn ich es mit Breite.getx/y probiere kommt immer ein Fehler und man braucht die Koordinaten da ja auch für, oder?

breite ist ein double, eine einzelne Zahl, gar keine Vorstellungen dazu?

A ist a.x; a.y

der nächste Punkt ist a.x+breite; a.y
der nächste Punkt ist a.x; a.y+hoehe
usw.

oh Gott, ja ich verstehe -_-. Dieses logische Denken bekomme ich irgendwie nicht hin. Ich werde mich Morgen dann mal dransetzen und die Aufgabe komplett zu Ende machen und dann meine Lösung hier mal posten :slight_smile:
Vielen Dank erstmal

Habe die Aufgabe nun vollendet -
Und es ist glaube ich sogar alles richtig…hoffe ich :slight_smile:

		System.out.println("Punkt A " + a.getX() + "|" + a.getY());
	}
	
	public void showB(){
		System.out.println("Punkt B " + (a.getX() + breite) + "|" + a.getY());
	}

	public void showC(){
		System.out.println("Punkt C " + (a.getX() + breite) + "|" + (a.getY() + hoehe));
	}

	public void showD(){
		System.out.println("Punkt D " + a.getX() + "|" + (a.getY() + hoehe));

	}
	
	public void showBreite(){
		System.out.println("Das Rechteck ist " + " " + breite + " " + "cm breit!");
	}

	public void showHoehe(){
		System.out.println("Das Rechteck ist " + " " + hoehe + " " + "cm hoch!");
	}

	public void showFlaeche(){
	double fläche;
	fläche = breite * hoehe;
	System.out.println("Die Fläche des Rechtecks beträgt " + " " + fläche + " " + "cm!");
	}```


```package Testat2;

public class RechteckTest {
	
	public static void main(String[] args){
		RechteckDi rechteck = new RechteckDi();
		System.out.println("Geben Sie bitte die senkrechte Verschiebung ein: ");
		double shift = EAM.rDouble();
		System.out.println("Geben Sie bitte die waagerechte Verschiebung ein: ");
		double lift = EAM.rDouble();
		rechteck.shift(shift);
		rechteck.lift(lift);
		rechteck.showA();
		rechteck.showB();
		rechteck.showC();
		rechteck.showD();
		rechteck.showBreite();
		rechteck.showHoehe();
		rechteck.showFlaeche();
		
	}

}```

eine Fläche hat eine andere Einheit als eine Strecke, aber in der Hauptsache sicherlich richtig