Methoden Methode über andere Klasse aufrufen

Dasha

Mitglied
Hi,

Ich hab zwei Klassen:

Java:
public class Punkt
{
public int x;
public int y;

public Punkt(int x, int y)
{
this.x = x;
this.y = y;
}
}

und

eine andere Klasse mit folgender Methode:

Java:
protected ArrayList<Punkt> punkte = new ArrayList<Punkt>();;

public void setPoints(ArrayList<Punkt> p)
{
??
punkte.add(???);
}


Die Methodenköpfe sind vorgegeben:
Die Frage ist wie rufe ich über die zweite Klasse nur den Konstruktor von Punkt auf?
Ich kann über new Punkt(2,2) einen Punkt erstellen aber dazu habe ich in zweiten Klasse keine Eingabemöglichkeiten für x und y.
Der Konstruktor soll nur aufgerufen werden und die Instanz von Punkt soll dann die Eingabe von mir fordern.


mfg
 
es ist nicht Aufgabe der Programmiersprache (oder des Forums) für irgendwelche Vorgaben krumme Umwege zu suchen,

wenn du ein Punkt-Objekt erstellen willst, dann mache das, an welcher Codestelle auch immer
- übergebe dabei 2 Dummy-Werte oder eben nicht
- lies an genau dieser Stelle Eingabewerte ein oder eben nicht
- wenn es dir angenehm erscheint kannst du einen Konstruktor ohne Parameter in Punkt programmieren, in dem dann von der Konsole eingelesen wird
- oder was auch immer du möchtest, alles ist möglich, du musst nur Schritt für Schritt strukturiert vorgehen,
aber nicht 'ich möchte xy, ohne Code z zu schreiben'

-----

> setPoints(ArrayList<Punkt> p)
klingt nebenbei danach als wären die Punkte schon vorhanden,
falls du neue Punkt-Objekt erstellen willst, wie wärs mit dem Werte der Objekte aus p?
na was zu tun ist musst du selber wissen
 
Was soll die Methoden den machen?

  • die übergebenen Punkte der punkte-Liste hinzufügen?
  • Kopie der übergebenen Punkte der punkte-Liste hinzufügen?
  • die punkte-Liste durch die übergebene Liste ersetzen?
 
Ich will keinen Umweg suchen 🙂
Ich möchte nur wissen (auch für die Zukunft) ob es möglich ist einen Konstruktor mit Parametern von außerhalb ohne eine weitere Parameterübergabe aufzurufen.
Ich hab es momentan mit Dummy Werten gemacht aber muss das auch sein?

@Final_Striker
Es soll bei jedem Aufruf von setPoints die Klasse Punkte aufgerufen werden und die Instanz wird dann in die ArrayList abgespeichert.
 
ein Konstruktor mit Parametern muss auch mit Argumenten (wie man dann so schön sagt) aufgerufen werden,
ja, das ist zwingend
 
@Final_Striker
Es soll bei jedem Aufruf von setPoints die Klasse Punkte aufgerufen werden und die Instanz wird dann in die ArrayList abgespeichert.
Java:
protected ArrayList<Punkt> punkte = new ArrayList<Punkt>();;
 
public void setPoints(ArrayList<Punkt> p)
{
??
punkte.add(???);
}
willst du einfach [c]punkte = p[/c] oder [c]p.addAll(p)[/c] ?!
 
Meine Anmerkungen zu Deinem Code:
- setPoints in der zweiten Klasse: Du verwendest hier die Signatur und die Namenskonvention eines sog. Setters. Der Sinn eines Setters ist ganz klar definiert. Der korespondierende Code müsste dann so aussehen:
Java:
// Setter/Getter sollten genauso heißen, wie die Instanzvariable, auf die sie zugreifen.
// Es wäre also ratsam, entweder die Variable von punkte in points umzubenennen oder
// die Methode von setPoints in setPunkte.
public void setPoints(ArrayList<Punkt> p) {
  this.punkte = p;
}
Wenn Du etwas anderes machen willst, solltest Du Deine Methode so benennen, dass man erkennt, was sie macht. Nachdem die Signatur aber vorgegeben war, nehme ich an, dass es wirklich ein Setter werden sollte.

Eine Idee für eine Methode, die das macht, was Du im Rumpf von setPoints angedacht hast, wäre folgende:
Java:
public boolean addAllPoints(Collection<Punkt> points) {
  return this.punkte.addAll(points);
}
Der Konstruktor soll nur aufgerufen werden und die Instanz von Punkt soll dann die Eingabe von mir fordern.
Davon würde ich abraten. Du würdest damit zwei Aufgaben (sog. Concerns) vermischen. Die Aufgabe der Klasse Punkt ist schlicht, die Werte zu speichern (plus eventuelle coole Funktionen). Das Anfordern von Eingaben ist eine ganz andere Aufgabe. Programmiere hierfür lieber eine GUI-Klasse, die dann anhand der Eingaben die Instanzen von Punkt erzeugt.
 

Zurück
Oben