Konsole gibt nicht das Gewünschte aus

TheDroggBagg

Mitglied
Hallo,

ich habe früher schon ein paar Erfahrungen mit Java gemacht. Heute fing dann bei uns die Informatik-AG an und wir haben gleich voll losgelegt.
Wir haben dann auch gleich angefangen, an einer kleinen Übung zu Klassen und Methoden zu programmieren, haben aber nicht viel geschafft.

Jetzt hab ich mich daheim nochmal hingesetzt und versucht, die Übung mit meinem, ich muss gestehen, noch recht kleinen Wissen, weiter zu machen.

Der erste Teil der Übung besteht darin, dass wir erstmal das hier in der Konsole ausgeben sollen:

Location Köln wurde erstellt
Location Düsseldorf wurde erstellt
Location München wurde erstellt
Hugo aus Köln wurde erstellt
Hans aus Düsseldorf wurde erstellt

Wir sollen für die Locations eine Klasse machen und für die Personen eine und das ganze dann in der Main Methode ausführen

Bisher sieht es bei mir so aus:


Hauptklasse:

Java:
package aufgabe.pkg1;

public class Aufgabe1 {

    public static void main(String[] args) 
    {
        Location ko = new Location("Köln");
        Location du = new Location("Düsseldorfs");
        Location mu = new Location("München");
        
        fn.locationErstellt();
        tt.locationErstellt();
        mu.locationErstellt();
        
        Person hugo = new Person ("Hugo", ko);
        Person hans = new Person ("Hans", du);
        
        hugo.personErstellt();
        hans.personErstellt();
        
    }    
}

Klasse für die Locations:

Java:
package aufgabe.pkg1;

public class Location 
{
        String city;
        
        void locationErstellt()
        {
            System.out.println("Location " + city + " wurde erstellt");
        }
        
        Location(String location)
        {
            this.city = location;
        }      
}

Und die Klasse für die Personen:

Java:
package aufgabe.pkg1;

public class Person 
{
        String person;
        Location city;
    
        void personErstellt()
        {
            System.out.println(person + " aus " + city + " wurde erstellt" );
        }
            
            Person(String person, Location location)
            {
                
                this.person = person;
                this.city = location;
            }
}

Wenn ich das jetzt aber starte, werden zwar die 3 Locations am Anfang richtig ausgegeben, aber bei den letzten beiden Sachen steht:

Hugo aus aufgabe.pkg1.Location@15db9742 wurde erstellt
Hans aus aufgabe.pkg1.Location@6d06d69c wurde erstellt

Wahrscheinlich ist die Lösung ganz einfach, aber ich bin echt am verzweifeln, da ich keine Ahnung hab, warum mir da nicht der Name von der Location angegeben wird ???:L

Ich hoffe ihr könnt mir helfen.

P.S.: Ich habs jetzt mal nicht in den Hausaufgaben Thread gestellt, da das ja keine Hausaufgabe ist, sondern nur eine aus Neugier weitergemachte Übung aus der Informatik AG. Sollte es trotzdem im falschen Thread sein, bitte verschieben 🙂
 
Zuletzt bearbeitet:
Woher soll das Programm den Wissen, wie eine Location als String aussieht? Das was da ausgegeben wird ist die Standardlösung von Java. Jedes Objekt hat die Methode toString() die diese Frage beantwortet. Die Standardantwort (von der Implementierung in Object) lautet Klassennahme@HashWert, hashWert ist dabei der Rückgabewert der ebenfalls in Object definierten Methode hashCode(). Wenn du denkst, dass das nicht passt, musst du die toString() Methode überschreiben und einen anderen String zurück geben.
Eine andere (einfache) Möglichkeit eine passende Ausgabe zu erziehlen, wäre location.city auszugeben, anstatt location. Woebei man bei sauberer Programmierung die Variable private deklarieren würde und einen Getter schreiben würde, aber damit greife ich eurem Kenntnisstand wahrscheinlich schon sehr weit vorraus.
 
Woher soll das Programm den Wissen, wie eine Location als String aussieht? Das was da ausgegeben wird ist die Standardlösung von Java. Jedes Objekt hat die Methode toString() die diese Frage beantwortet. Die Standardantwort (von der Implementierung in Object) lautet Klassennahme@HashWert, hashWert ist dabei der Rückgabewert der ebenfalls in Object definierten Methode hashCode(). Wenn du denkst, dass das nicht passt, musst du die toString() Methode überschreiben und einen anderen String zurück geben.

Und wo im Code muss die toSring() Methode überschreiben ?

Die Meldung, dass die Objekte erstellt wurden, sollten durch den Konstruktor ausgegeben werden. 😉

Das überfordert mich jetzt ein wenig 😀 Mit was geb ich die Meldung derzeit aus und wie kann ich diese im Konstruktor ausgeben ?
 
Und wo im Code muss die toSring() Methode überschreiben ?

In deiner Klasse Location, da du ja von dieser Klasse die Ausgabe ändern willst.

Java:
@Override
public String toString() {
    // deinen gewünschten Text als String zurückgeben
}

Das überfordert mich jetzt ein wenig 😀 Mit was geb ich die Meldung derzeit aus und wie kann ich diese im Konstruktor ausgeben ?

Komische Frage, derzeit gibst du deine Meldungen auf der Konsole aus. Im Konstruktor könntest du "System.out.println("")" auch verwenden.
 

Zurück
Oben