Methoden Mein erstes Programm - und gleich Probleme

Beginner88

Mitglied
Hallo Leute,

bin ziemlich neu hier(gerade erst registriert) und will auch gleich mein erstes Problem schildern. Es geht um eine Aufgabe für die Uni, ich studiere zwar kein Informatik, aber gemacht werden muss es trotzdem und ich tue mich damit ziemlich schwer. Das Programm ist sicher sehr simpel, ich möchte auch die Aufgabe nicht komplett gemacht bekommen, bräuchte nur etwas Hilfestellung. In die Theorie der OOP hab ich mich schon ewas eingelesen... nun zur Aufgabe(Problem):

Wir sollen ein kleines Programm schreiben, welches Distanzen zwischen 2 Orten berechnen kann, dabei eine Klasse erstellen, welche den Ort mit Namen und Koordinaten verwaltet. Eine Klasse die eine Bounding Box berechnet(kleinstes, alle Punkte umschließendes Viereck), mit Methoden zur Wiedergabe von Eckpunkt, Breite und Höhe und Eine Klasse als Applikation, welche 3 Orte instantiiert die Boundingbox mit Eckpunkt, Breite und Höhe auf der Konsole ausgibt, die Namen und Koordinaten der 3 Orte sowie ihre Distanzen.



So, nun die Klasse welche einen Ort verwaltet hab ich schon, meine konkreten Fragen sind:

1. Wie mache ich das mit dem kleinsten, alle Punkte umfassenden Viereck? Also Wie sage ich dem Programm er soll jenen Punkt nehmen, welcher der größten X und Y Wert besitzt und
2. Wie sage ich der Applikationsklasse, das das Objekt "Ort" die Methoden und Attribute aus der Allgemeinen Klasse "Ort" verwenden soll, oder wird das mit dem "new-Operator" automatisch geregelt?


für ein bisschen Hilfe wäre ich wirklich sehr dankbar.

Viele Grüße
Rudi
 
Hi und willkommen im Forum.
Am besten bei so Aufgaben ist es, wenn du erstmal zeigst was du schon hast.
Daher, wie ist denn die Klasse Ort (falls vorhanden) implementiert, wie kommt man an die Attribute wie x bzw y-Koordinaten?

Den Aufruf für die Methode könntest du aber z.b. über Parameter machen.
Angenommen du hast eine Klasse Ort und 3 Objekte davon (o1,o2,o3)
dann könntest du die Methode so schreiben:
Java:
public void machIrgendwas (Ort a, Ort b, Ort c){
//tuwas
}
und dann entsprechend so aufrufen:
Java:
machIrgendwas(o1,o2,o3);
Gruß
 
1. Wie mache ich das mit dem kleinsten, alle Punkte umfassenden Viereck? Also Wie sage ich dem Programm er soll jenen Punkt nehmen, welcher der größten X und Y Wert besitzt und

Es ist nicht unbedingt so, daß es einen Punkt gibt, der sowohl den größten X- als auch den größten Y-Wert hat.
Halte in 4 Variablen fest: minX, minY, maxX, maxY. Nimm Dir nun jeden Punkt eines jeden Viereckes vor: ist der X-Wert größer als maxX? Dann übernimmt maxX diesen Wert. Ist der X-Wert kleiner als minX? Dann übernimmt minX diesen Wert. Entsprechend für die Y-Werte. Hast Du alle Punkte durch, hast Du das umfassende Viereck - es spannt sich zwischen (minX,minY) und (maxX,maY) auf.

2. Wie sage ich der Applikationsklasse, das das Objekt "Ort" die Methoden und Attribute aus der Allgemeinen Klasse "Ort" verwenden soll, oder wird das mit dem "new-Operator" automatisch geregelt?
Ja, wird es.
 
Es ist nicht unbedingt so, daß es einen Punkt gibt, der sowohl den größten X- als auch den größten Y-Wert hat.
Halte in 4 Variablen fest: minX, minY, maxX, maxY. Nimm Dir nun jeden Punkt eines jeden Viereckes vor: ist der X-Wert größer als maxX? Dann übernimmt maxX diesen Wert. Ist der X-Wert kleiner als minX? Dann übernimmt minX diesen Wert. Entsprechend für die Y-Werte. Hast Du alle Punkte durch, hast Du das umfassende Viereck - es spannt sich zwischen (minX,minY) und (maxX,maY) auf.

Ahh, da hast du natürlich völlig recht, es Muss ja kein Punkt sein dessen Koordinaten auch die Max/Min sind, nur die einzelnen X oder Y Koordinaten.
Dummer Denkfehler von mir. Also ist dann natürlich die Breite einfach Xmax - Xmin, die Höhe Ymax - Ymin und die 4 Eckpunkte sind dann auch klar...
 
So,

ich habe nun also die Klasse, welche die Methoden und Attribute für die orte verwaltet:

Java:
	public class Ort {

		
		private String Name;

		private double X_;

		private double Y_;

		
		public Ort(double i, double j) {
			
		}

		public String getName() {
			return Name;
		}

		public void setName(String Name) {
			this.Name = Name;
		}


		public double getX_() {
			return X_;
		}

		public void setX_(double X_) {
			this.X_ = X_;
		}

		public double getY_() {
			return Y_;
		}

		public void setY_(double Y_) {
			this.Y_ = Y_;
		}

	}

Und ich habe eine Klasse welche nun 3 Objekte erschaffen hat:

Java:
public class Applikation {

	public static void main(String[] args) {
		
		Ort dresden = new Ort(8,5.5);
		Ort münchen = new Ort(3.5,2);
		Ort hamburg = new Ort(1,9);

	}

}


Wie kann ich nun in der dritten Klasse die simple Bounding Box dafür schreiben? Ich weiß zwar genau, was ich machen muss nur nicht wie, habe einfach massiv Probleme mit der Syntax, und das ganze Theorie gewälze hat mir dabei auch nicht wirklich geholfen.
 
In Deiner Ort-Klasse werden die X- und Y-Werte gar nicht übernommen. In Zeile 12 muß also noch Code hin, der i und j nach X_ und Y_ kopiert.

BoundingBox: Mein Vorschlag: entwirf eine Klasse "Rechteck", die Referenzpunkt und Abmessungen eines Rechtecks beinhaltet. Initialisiert werden soll das Rechteck mit einem Ort. Die Abmessungen betragen dann noch 0. Entwirf eine Methode addOrt, die als Parameter einen Ort erwartet und dann die Abmessungen erweitert und/oder den Referenzpunkt verschiebt, so daß das Rechteck den übergebenen Ort einschließt (so, wie ich das oben schon beschrieben habe).

In der Applikationsklasse erzeugst Du dann ein Rechteck-Objekt, initialisierst es mit dem ersten Ort, rufst dann addOrt mit dem zweiten Ort, dann mit dem dritten Ort auf und gibst dann Referenzpunkt und Abmessungen des Rechteckobjektes aus.

Java hat übrigens bereits genau sowas auch vorrätig: die Klassen Point und Rectangle. Mir ist schon klar, daß Du die Aufgabe hast, das selbst zu implementieren, aber Du kannst Dir die API mal anschauen, um beispielhaft zu sehen, wie Dinge in einem Programm strukturiert werden können. Die Rectangle-Klasse von Sun hat allerdings einen Schönheitsfehler: initialisiert man sie ohne Parameter, liegt deren Referenzpunkt bei (0,0). Fügt man dann mit add Punkte hinzu, würde die "BoundingBox" auf jeden Fall den Punkt (0,0) einschließen, was nicht gewünscht sein dürfte.
 
Ich bin selber ncoh ein ziemlicher Java anfänger, ich sag mal kurz, was mir so auffält:

Du hast eine Instanzvariable für den Namen der Stadt. Diese Variable wird aber im Konstruktor nicht gesetzt( mal von dem abgesehen, was Rajmund sagte) Du erstellst für die Orte in deiner Main Methode variablen, denen du die Stadtnamen gibst, aber das ändert nichts daran, das die instanzvariable für den Namen nicht gesetzt wird.
 

Zurück
Oben