# Instanzvariabelen ändern etc.



## Manuell21 (8. Dez 2014)

Hallo liebe Java-Freunde und (hoffentlich) zukünfitige Kollegen,

ich habe eine etwas komplexere Aufgabe und weiß nicht, ob das was ich gemacht habe richtig ist und vor allem nicht, wie ich die Instanzvarriabelen von einem Objekt ändere, dass mit einer Konstruktormethode aus einer anderen Klasse erstellt wurde.

Meine Aufgaben sind folgende:

1. 

 Schreiben Sie eine Instanzmethode
public void shift(double weite)
,
die den Punkt um die angege-
bene Weite waagerecht auf der
Zeichenebene verschiebt.
- Schreiben Sie eine Instanzmethode
public void lift(double weite)
,
die den Punkt um die angege-
bene Weite senkrecht auf der
Zeichenebene verschiebt.
•
Hinweis:
Positive Werte für den Parameter weite sollen eine Verschiebung
des Punktes nach rechts bzw. oben bewirken, negative Werte eine Ver-
schiebung nach links bzw. unten.

Meine Lösung (müsste eigentlich schon stimmen?):



```
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 this.x;
	}
	public double getY() {
		return this.y;
	}
	
	// selbst ab hier
	
	public void shift (double weite){
		System.out.println("Wie weit möchten Sie den Punkt verschieben (X-Achse)?");
		weite = EAM.rDouble(); 
		this.x= x + weite;
		
	}
	
	
	public void lift (double weite){
		System.out.println("Wie weit möchten Sie den Punkt verschieben (Y-Achse)?");
		weite = EAM.rDouble(); 
		
		this.y= y + weite;
		
	}
	
	

	
}
```


Nun kommt die nächste Aufgabe, bei der ich nicht weiß, wie ich den X bzw. Y Wert des Punktes a zum verschieben des Rechteckes verändern soll!




b) Erweitern Sie die Klasse RechteckMi:
- Schreiben Sie zwei Instanzmethoden
shift
und
lift
, die in Analogie zu den
Methoden der Klasse Punkt das gesam-
te Rechteck waagerecht bzw. senk-
recht verschieben.
- Schreiben Sie außerdem die Instanz-
methoden
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.

Meine jetzige Lösung:


```
public class RechteckMi {
	
	private Punkt a;
	private Punkt c;
	private Punkt b;
	private Punkt d;
			
	public RechteckMi(){
		System.out.println("Festlegen des Eckpunktes A:");
		this.a = new Punkt();
		System.out.println("Festlegen des Eckpunktes C:");
		this.c = new Punkt();
		
	}
	
	
	public double getHoehe(){
		
		double	ax =	a.getX();
		
		double cx = c.getX();
		
		double hoehe = cx - ax;
		
		
		
		return hoehe;
		
	}
	
	
	public double getBreite(){
		
		double	ay =	a.getY();
		
		double cy = c.getY();
		
		double breite = cy - ay;
		
		return breite;
		
	}
	
	
	public void showHoehe(){
		
		System.out.println(getHoehe());
	}
	
	
	public void showBreite(){
		
		System.out.println(getBreite());
	}
	
	
	public void showFlaeche(){
		
		double flaeche = getHoehe() * getBreite();
		
		System.out.println("Die Flaeche ist: " + flaeche);
		
		
	}
	
	
	public void showA(){
		
		double	x =	a.getX();
		System.out.println(" A/x= " + x);
		
		double	y =	a.getY();
		System.out.println(" A/y= " + y);
		
		
		
		
	}
	
	
	public void showB (){
		
	double	bx = c.getX() ;
	
	double	by = a.getY() ;
		
		System.out.println("B hat die Koordinaten X: " + bx + " und Y: " + by);
		
		b = new Punkt(bx, by);
		
	}
	
	
	public void showC(){
		
		double	x =	c.getX();
		System.out.println(" C/x= " + x);
		
		double	y =	c.getY();
		System.out.println(" C/y= " + y);
		
	}
	
	
	public void showD (){
		
	double	dx = a.getX() ;
	
	double	dy = c.getY() ;
		
		System.out.println("D hat die Koordinaten X: " + dx + " und Y: " + dy);
		
		d = new Punkt(dx, dy);
		
	}
	
	
	
	public void lift (double weite){
		System.out.println("Wie weit möchten Sie den Punkt verschieben (Y-Achse)?");
		weite = EAM.rDouble(); 
		
	double z =	a.getY() + weite;
		
		a = new Punkt (a.getX(), z);
		
	}
			
}
```

Nun zur letzten Aufgabe. Hier weiß ich nicht, wie die main Methode die Methoden aus Aufgabe 2 aufrufen kann muss ich die globalen Varriabelen auf "static" setzen, damit alles überhopt ausgeführt werden kann?

 Schreiben Sie nun noch eine
Klasse namens Rechtecktest
, deren main-
Methode unter Nutzung der Klasse RechteckMi
- eine Instanz der Klasse RechtechMi 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 komme ich gar nicht weiter.


----------



## JavaMeister (8. Dez 2014)

Also dein Punkt ist schon mal Optimierungenbedürftig. 

Du übergibst die weite und fragst dann nochmal nach der weite. Das kann nicht korrekt sein.

Bei einem Rechteck muss man sich überlegen was das bedeutet, wenn das Rechteck nach rechts verschoben werden muss. 

Richtig.  Alle Punkte müssen analog verschoben werden. Du erstellst aber neue Punkte. Und vergisst dabei, dass die Punkte Lift und Shift Methoden haben.


----------

