Externer Methodenaufruf, Punkt-Notation

Ionc

Mitglied
Hallo zusammen,

erst mal zu mir:
Ich habe seit ein paar Wochen den Informatik- Kurs für Objektorientierte Programmierung mit Java in der Schule belegt, und bin grad dabei mir die Grundlagen zuzulegen. Wir benutzen BlueJ, aber das dürfte ja zumindestens vom Namen her bekannt sein.

So, das Projekt lautet jetzt zwei "Flughäfen" zu Programieren.
Das klingt erstmal ziemlich banal, doch ich habe ein konkretes Problem.

Wenn beim ersetn Flughafen ein Flugzeug abhebt, soll an dem anderen landen, was sich im Status der Landebahn wiederspiegelt( Frei/ Besezt).
Führe ich also am ersten Flughafen die Methode starten aus, soll am ersten Flughafen die Landebahn frei(true), und am anderen besezt(false) werden.

Bisher hatte ich an soetwas gedacht, da ich keine static Methoden verwenden soll(haben wir noch nicht im Kurs gemacht), und ich ja ein Objekt brauche um aus der anderen Klasse drauf zugreifen zukönnen.

Klasse 1
[Java]public class Flughafen_nord
{
boolean bahnfrei_nord;

public Flughafen_nord()
{
Flughafen_nord fhn = new Flughafen_nord();
}

public void starten_nord()
{
bahnfrei_nord = true;
}
}

[/Java]


Klasse 2:


Java:
public class Flughafen_sued
{
    public boolean bahnfrei_sued;
    
    public Flughafen_sued()
    {
        bahnfrei_sued = true;
    }
    
    public  void landen_sued()
    {
        bahnfrei_sued = false;
    }
}

Allerdings bekomme ich jetzt wenn ich ein Objekt von der Klasse Flughafen_nord erstellen will die Fehlermeldung :

Java:
java.lang.StackOverflowError
	at flughafen_sued.<init>(flughafen_sued.java:6)
	at flughafen_sued.<init>(flughafen_sued.java:7)

Denke ich zu kompliziert? :bahnhof:
Versteht maan überhaupt was ich meine? :(
Danke für Hilfe soweit schon mal


MFG

Ionc
 
I

irgendjemand

Gast
aua ... das war wohl nichts

Java:
public Flughafen_nord()
    {
        Flughafen_nord fhn = new Flughafen_nord();
    }
ist eine endlose rekursion ... und somit nicht möglich

jedes mal wenn du von FlughafenNord *den underscore nutzt man in java nur bei konstanten* erzeugst du INNERHALB dieses konstruktors ein neues , völlig sinnloses objekt *da du es ja nirgendspeicherst* ...

alleinde wenn du dir den satz durch liest stellst du fest : und willst ein Objekt erstellen welches bei seiner erstellung ein neues Objekt des selben typs erstellen will ...

selbst wenn du irgend n abbruchbedingung hättest gehört rekursion NICHT in einen konstruktor *zumindest fällt mir keine sinnvolle verwendung dafür ein*

da mir auch nicht einleuchten will warum du überhaupt innerhalb eines konstruktors ein objekt von dem typ erzeugen willst was du gerade erzeugst ... würde ich dir sagen dich doch noch mal mit Objekten und Konstruktoren auseinander zu setzen

*google -> javainsel konstruktor*
 

faetzminator

Gesperrter Benutzer
Ja natürlich.
Java:
public Flughafen_nord() {
    Flughafen_nord fhn = new Flughafen_nord();
}
Du erstellst im Konstruktor ein neues Objekt, welches dann wieder dessen Konstruktor aufruft, welches ein neues Objekt erstellt, welches ...
Abgesehen davon schreibt man Klassen Camel Case mit beginnendem Grossbuchstabe, also [c]FooBarBazQuoz[/c] und nicht [c]Foo_bar_baz_quoz[/c].
Und ich glaub, du könntest einfach mit einer Klasse [c]Flughafen[/c] arbeiten, welche einen allgemeineren boolean verwalten ([c]istBahnFrei[/c]?).
 

Ionc

Mitglied
aua ... das war wohl nichts

Java:
public Flughafen_nord()
    {
        Flughafen_nord fhn = new Flughafen_nord();
    }

ein Objekt erstellen welches bei seiner erstellung ein neues Objekt des selben typs erstellen will ...

Ja das stimmt. Und doch weis ich immer noch nicht wie ich jetzt weiter vorgehen soll.
Modularisierung soll nämlich vorkommen. Muss [c] Flughafen_nord fhn = new Flughafen_nord(); [/c]
in eine eigene Methode?
 

faetzminator

Gesperrter Benutzer
Du musst diese Zeile dorthin schreiben, wo du ein Objekt dessen benötigst... Wo das nun ist kann ich ohne Glaskugel leider nicht herausfinden, ist gerade in Reparatur ;) Was der allgemeine Einstiegspunkt eines Javaprogrammes ist, solltest du allerdings wissen.
 

Ionc

Mitglied
Whoo das war wohl gestern ein bisschen spät ;)
Also ich hab jetzt meinen Quelltext ein bisschen verändert und hoffe ich kann jetzt mein Problem zum Ausdruck brigen:

Klasse 1(sued)

Java:
public class FlughafenSued
{
    public boolean bahnfreiSued;
    
    public FlughafenSued()
    {
        bahnfreiSued = true;
    }
    
    public  void landenSued()
    {
        bahnfreiSued = false;
    }
}

Klasse 2(nord)

Java:
public class FlughafenNord
{
    boolean bahnfreiNord;
   
      public void startenNord()
    {
        bahnfreiNord = true;
        FlughafenSued.landenSued();
    }
}

Ich möchte also mit der Methode [c] public void startenNord()[/c] , in der Klasse [c] public class FlughafenNord[/c] die Methode [c] public void landenSued()[/c] in der Klasse [c]public class FlughafenSued [/c] ausführen.

Doch jetzt gibt mir der Compiler den Fehler
[c] non static method cannot referenced from a static context [/c]
zurück. Gibt es eine Möglichkeit dies ohne eine statische Methode zu lösen? Ich muss wahrscheinlich ja ein Objekt mit dem new-Operator erzeugen. Doch an welcher Stelle????:L

Danke nochmal für Hilfe

Ionc
 

faetzminator

Gesperrter Benutzer
Öhm dort wo du das Objekt benötigst. Ich weiss irgendwie immer noch nicht so ganz, was du machen Willst. Müssen beide "Flughäfen" aufeinander referenzieren? Dann mach zwei Setter-Methoden.
Java:
Flughafen a = new Flughafen();
Flughafen b = new Flughafen();
a.setXY(b);
b.setXY(a);
 
G

gman

Gast
Java:
FlughafenSued.landenSued();

Das ist ein statischer Zugriff auf die Methode "landenSued()". Du brauchst das was
faetzminator geschreiben hat und dann:

Java:
public class FlughafenNord
{
    boolean bahnfreiNord;
    FlughafenSued flughafenSued;
   
      public void startenNord()
    {
        bahnfreiNord = true;
        flughafenSued.landenSued();
    }

    public void setFlughafenSued(FlughafenSued flughafenSued) {
        this.flughafenSued = flughafenSued;
    }
}

Allerdings könnte man das auch allgemeiner modellieren. Z.B. eine Flughafen-Klasse und
in der Main-Methode nur zwei Objekte der Klasse anlegen (Nord und Sued halt).
 

Ionc

Mitglied
Vielen Dank schonmal, doch leider bekomme ich jetzt, wenn ich die [c] public void startenNord()[/c] Methode ausführen will den Fehler [c]java.lang.NullPointerException
at FlughafenNord.startenNord(FlughafenNord.java:14)
[/c]

Andersherum, mit Sued natürlich das gleiche.

Mein Quelltext sieht jetzt so aus :
[Java]
public class FlughafenNord
{
boolean bahnfreiNord;
FlughafenSued flughafenSued;

public FlughafenNord()
{
bahnfreiNord = false;
}

public void startenNord()
{
bahnfreiNord = true;
flughafenSued.landenSued();
}

public void setFlughafenSued(FlughafenSued flughafenSued) {
this.flughafenSued = flughafenSued;
}

public void landenNord()
{
bahnfreiNord = false;
}
}
[/Java]


Wäre es auch möglich mir kurz zu erklären wofür
Java:
 public void setFlughafenSued(FlughafenSued flughafenSued) {
        this.flughafenSued = flughafenSued;
    }
und Zeile 4 verwendet wird, und was es eigentlich ist :oops:

Danke
 

Michael...

Top Contributor
Wäre es auch möglich mir kurz zu erklären wofür
Java:
 public void setFlughafenSued(FlughafenSued flughafenSued) {
        this.flughafenSued = flughafenSued;
    }
und Zeile 4 verwendet wird, und was es eigentlich ist :oops:
die ist dafür da um die NullPointerException zu vermeiden ;-)
Ernsthaft: Wenn ein Objekt A eine Methode an einen Objekt B aufrufen will, muss A Objekt B kennen bzw. auf dieses zugreifen können. Diese Methode ist dafür gedacht ein Objekt vom Typ FlughafenSued, dem Objekt vom Typ FlughafenNord bekannt zu machen. Damit Nord später auch dessen landen... Methode aufrufen kann.

Von den Vorschlägen nur eine Flughafen Klasse zu schreiben und für beide Flughäfen zu nutzen hälst Du wohl nichts ;-)
 

Dragonfire

Bekanntes Mitglied
Sind diese beiden Klassen vorgegeben?
Ich würde das ein wenig anders lösen ...

Ein Flughafen ist ein Objekt,
Ein Objekt hat gewisse Eigenschaften ...

Ein Flughafen hat in deinem Beispiel einen Namen, als String (Süd, Nord)
und eine Belegung ob die Flugbahn frei ist (boolean).

Dies setzen wir mal flott um:

Java:
public class Airport {

    private String name;
    private boolean empty;

    public Airport (String airportName) {
        name = airportName;
        empty = true;
    }

    public void landOnAirport() {
        empty = false;
    }

    public void flyAway() {
        empty = true;
    }
}

Unser Flughafen kann jetzt aber noch nicht viel, vor allem gibt es irgendwie keine Verbindung zum anderen Flughafen (es existieren keine Beziehungen).

Bei deinem Beispiel hat jeder Flughafen einen Nachbarflughafen,
also machen wir das auch mal schnell plus das Herz,
ein Flugzeug kann zu einem anderen Flughafen fliegen:


Java:
public class Airport {

    private String name;
    private boolean empty;
    private Flughaben neighbour;

    public Airport (String airportName) {
        name = airportName;
        empty = true;
    }
    
    public void landOnAirport() {
        empty = false;
    }

    public void flyAway() {
        empty = true;
    }

    public void flyToNeighbour() {
        flyAway();
        neighbour.landOnAirport();
    }
    
    public void setNeighbour(Airport neighbourAirport) {
        neighbour = neighbourAirport;
    }
}

Jetzt spielen wir Flughafentower ...
Ich weiß nicht mehr wie genau,
aber ich meine du konntest in BlueJ Objekte erstellen und Methoden aufrufen:

Erstell einmal
Code:
a1 = new Airport("Süd")
und
Code:
a2 = new Airport("Nord")

dann setze die Nachbarflughäfen:

Code:
a1.setNeighbour(a2)
und
Code:
a2.setNeighbour(a1)

Jetzt
solltest du flyToNeighbour aufrufen können.
Mach eventuell noch ein paar Testausgaben rein, um zu sehen was passiert ;)
Das Programm überprüft nicht ob man landen kann, dass kannst du ja selbst realisieren^^

ALLES UNGETESTET ...

PS.: Willst du keine festen Nachbarn setzen kann man es auch so machen:

Java:
public class Airport {

    private String name;
    private boolean empty;

    public Airport (String airportName) {
        name = airportName;
        empty = true;
    }
    
    public void landOnAirport() {
        System.out.println("Airplane land on " + this.name);
        empty = false;
    }
    
    public void flyAway() {
        System.out.println("Airplane fly away from " + this.name);
        empty = true;
    }
    
    public void flyToAirport(Airport target) {
        flyAway();
        target.landOnAirport();
    }
}
 

Ionc

Mitglied
Vielen vielen Dank Dragon Fire!

Ich habe mich jetzt auch für diese Lösung entschieden, da es so wohl am einfachsten ist.
Ich sollte in meiner aufgabe nur Modularisierung verwenden, doch diese werde ich jetzt an anderer Stelle einsetzten.
Hab deine Lösung jetzt ersteinmal noch ein bisschen abgewandelt, doch jetzt weis ich wie ich weiter machen kann.
Habe jetzt auch keine festen "nachbarn" benutzt.

Danke, ich makier das Thema als erledigt.


MFG

Ionc( eigentlich IonIc;p)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C NoClassDefFoundError mit externer Jar bei Start aus Eclipse Java Basics - Anfänger-Themen 3
E Best Practice Jar-file mit zwei Klassen und externer Bibliothek über Konsole erzeugen Java Basics - Anfänger-Themen 13
K Erste Schritte JavaFX - wie von "externer" Klasse auf Methoden des Controllers zugreifen Java Basics - Anfänger-Themen 2
S log4j in externer Library Java Basics - Anfänger-Themen 4
R Klassen Problem mit externer Klasse Java Basics - Anfänger-Themen 5
A externer repaint Aufruf Java Basics - Anfänger-Themen 9
B Linux, Dateipfad, Einbindung externer Dateien.. Java Basics - Anfänger-Themen 7
A paint() methode von externer Klasse aufrufen Java Basics - Anfänger-Themen 3
G Aufruf externer Funktionen Java Basics - Anfänger-Themen 7
J Methoden in externer Klasse -> Nullpointer Exception Java Basics - Anfänger-Themen 9
X Externer GUI Code verwenden / (Design Ansicht) Java Basics - Anfänger-Themen 3
M JS Import aus externer Jar Datei Java Basics - Anfänger-Themen 5
A SongChangeListener aus externer Lib Java Basics - Anfänger-Themen 5
D Öffnen externer Dateien mit Eclipse Java Basics - Anfänger-Themen 5
W Java ProcessBuilder - externer Prozess nur einmal starten und mehrere Inputs geben Java Basics - Anfänger-Themen 7
Z Text aus externer Datei in TextArea einlesen Java Basics - Anfänger-Themen 5
U Externer aufruf zum Fenster erstellen will nicht Java Basics - Anfänger-Themen 2
B externer Listener für Zeichenbereich? Java Basics - Anfänger-Themen 2
T Klassen und Objekte externer Aufruf. Java Basics - Anfänger-Themen 8
P JSP - Daten aus externer Datei auslesen und anzeigen Java Basics - Anfänger-Themen 3
M String aus externer Klasse in JTextArea schreiben Java Basics - Anfänger-Themen 4
T Öffnen externer Datei als eigener Prozess Java Basics - Anfänger-Themen 8
B Öffnen externer Dateien Java Basics - Anfänger-Themen 16
F Einbindung externer JARs Java Basics - Anfänger-Themen 2
M Externer ActionListener funkt nicht so wie ichs ma vorstell Java Basics - Anfänger-Themen 2
R Ausgaben von externer .exe einlesen Java Basics - Anfänger-Themen 2
C Methodenaufruf mit geänderten Argumenten Java Basics - Anfänger-Themen 10
S Methoden Methodenaufruf rekursiv zählen Java Basics - Anfänger-Themen 4
N methodenaufruf for each geht nicht Java Basics - Anfänger-Themen 2
K Methodenaufruf /-ausgabe Java Basics - Anfänger-Themen 5
O Methodenaufruf Java Basics - Anfänger-Themen 5
V Neue Ausgabe von toString nach Methodenaufruf Java Basics - Anfänger-Themen 9
Queiser Methodenaufruf Java Basics - Anfänger-Themen 2
J Vererbung und Methodenaufruf Java Basics - Anfänger-Themen 11
I Java Methodenaufruf Java Basics - Anfänger-Themen 9
A OOP Methodenaufruf in einer anderen Klasse Java Basics - Anfänger-Themen 2
G Methoden Probleme beim Methodenaufruf Java Basics - Anfänger-Themen 2
M Methodenaufruf über SQL UPDATE Java Basics - Anfänger-Themen 8
M Methodenaufruf in der Main Datei funzt nicht Java Basics - Anfänger-Themen 13
BadBat Klassen instanz als variable + methodenaufruf Java Basics - Anfänger-Themen 4
M Methodenaufruf in Methode Java Basics - Anfänger-Themen 6
M Objekt Name für MethodenAufruf nachträglich zuweisen? Java Basics - Anfänger-Themen 2
J if() mit Methodenaufruf kombiniert (Pixelerkennung) Java Basics - Anfänger-Themen 3
A Probleme beim Methodenaufruf von Object[] ! Java Basics - Anfänger-Themen 12
A Probleme beim Methodenaufruf von char[] ! Java Basics - Anfänger-Themen 10
T Rekursiver Methodenaufruf funktioniert nicht Java Basics - Anfänger-Themen 7
D Methoden g.setColor funktioniert nicht bei Methodenaufruf in anderer Klasse Java Basics - Anfänger-Themen 1
M Methoden Methodenaufruf allgemein Java Basics - Anfänger-Themen 3
H Ist Math.Random() eine Methode oder ein Methodenaufruf (Klausurfrage) Java Basics - Anfänger-Themen 4
O Methodenaufruf Java Basics - Anfänger-Themen 6
F Methodenaufruf Java Basics - Anfänger-Themen 1
F Erste Schritte Label Text vor Methodenaufruf setzen Java Basics - Anfänger-Themen 17
J Array mit Methodenaufruf Java Basics - Anfänger-Themen 2
S Problem bei Vererbung und Methodenaufruf Java Basics - Anfänger-Themen 3
OnDemand Methodenaufruf Java Basics - Anfänger-Themen 3
A Methoden Benutzerdefinierter Methodenaufruf Java Basics - Anfänger-Themen 4
O Methodenaufruf - Inhaltsveränderung Java Basics - Anfänger-Themen 23
G Methodenaufruf anderer Klasse Java Basics - Anfänger-Themen 18
L Einfacher Methodenaufruf vs. Objekt Java Basics - Anfänger-Themen 4
O Methodenaufruf im Konstruktor Java Basics - Anfänger-Themen 6
G was ist ein Methodenaufruf mit (){}? Java Basics - Anfänger-Themen 6
S Methoden Klassen Definition - Methodenaufruf Java Basics - Anfänger-Themen 7
K Methoden Methodenaufruf für BufferedWriter .. Java Basics - Anfänger-Themen 5
feardorcha Methodenaufruf Übergabe- und Rückgabewert Java Basics - Anfänger-Themen 5
W Methodenaufruf innerhalb einer Klasse - static vs. this Java Basics - Anfänger-Themen 3
A Problem bei Methodenaufruf Java Basics - Anfänger-Themen 6
B Parameterausführung bei Methodenaufruf Java Basics - Anfänger-Themen 8
A Methodenaufruf Java Basics - Anfänger-Themen 4
P Vererbung Methodenaufruf funktioniert aber Wertzuweisung von Variablen nicht Java Basics - Anfänger-Themen 9
S methodenaufruf Java Basics - Anfänger-Themen 8
G Erste Schritte Methodenaufruf, Variablen-Deklaration Java Basics - Anfänger-Themen 6
L Methodenaufruf in main() Java Basics - Anfänger-Themen 3
M Methodenaufruf in for-Schleife - nur 1 mal ausgegeben Java Basics - Anfänger-Themen 3
I Methoden Rückverfolgung Methodenaufruf Java Basics - Anfänger-Themen 15
E Methoden Wie kann ich eine Methode so schreiben, dass Methodenaufruf polymorph erfolgen kann? Java Basics - Anfänger-Themen 8
M Methoden Methodenaufruf mit .class. Java Basics - Anfänger-Themen 2
J rekursiver Methodenaufruf Java Basics - Anfänger-Themen 12
K Klassen this-Referenz und Klassen/Methodenaufruf Syntax Java Basics - Anfänger-Themen 3
T Java mehrfacher Methodenaufruf Java Basics - Anfänger-Themen 15
L Methodenaufruf aus anderer Klasse Java Basics - Anfänger-Themen 5
B Quicksort --> Methodenaufruf Java Basics - Anfänger-Themen 10
O Methodenaufruf Java Basics - Anfänger-Themen 4
A nullPointerException bei Methodenaufruf Java Basics - Anfänger-Themen 16
J Vererbung, Methodenaufruf Java Basics - Anfänger-Themen 4
M Problem bei Methodenaufruf aus ActionListener Java Basics - Anfänger-Themen 5
G Methodenaufruf aus der Kommandozeile Java Basics - Anfänger-Themen 28
N Methodenaufruf funtioniert nicht Java Basics - Anfänger-Themen 3
C Methodenaufruf mit Variablen die gesetzt werden Java Basics - Anfänger-Themen 10
Antoras mit ActionListener/Methodenaufruf Textfelder zeichnen Java Basics - Anfänger-Themen 4
G Dynamischer Methodenaufruf Java Basics - Anfänger-Themen 3
G Methodenaufruf über ein Objekt einer anderen Klasse Java Basics - Anfänger-Themen 7
H ungültige methodenaufruf Java Basics - Anfänger-Themen 16
G Methodenaufruf Java Basics - Anfänger-Themen 3
G Frage zu Oberklasse bei Methodenaufruf Java Basics - Anfänger-Themen 2
V Dynamischer Klassen bzw. Methodenaufruf Java Basics - Anfänger-Themen 6
V Wie und wieso geht dieser Methodenaufruf? Java Basics - Anfänger-Themen 2
S Methodenaufruf Java Basics - Anfänger-Themen 6
G Methodenaufruf in der for-Schleife mit Array Java Basics - Anfänger-Themen 7
L hsqldb Methodenaufruf Java Basics - Anfänger-Themen 10
K synchron und asynchroner Methodenaufruf Java Basics - Anfänger-Themen 17

Ähnliche Java Themen

Neue Themen


Oben