Hashtabelle werte auslesen! Hilfe

  • Themenstarter Themenstarter Hartl
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
H

Hartl

Gast
Hi!

Ich muss im Rahmen einer Übung fürs Studium ein prog. schreiben.

Hab aber folgendes Prob.!

Ich muss ein Objekt von der Klasse Person(String vorname, String nachname, String svnr) in eine Hashtabelle einlesen.

Als Schlüssel dient die SVnr!

So jetzt hab ich so versucht:

Code:
String vorname = "Hartl";
String nachname = "Mayer";
String svnr = "0123456789";


Person b = new Person(vorname, nachname, svnr);

Hashtable tabelle = new Hashtable();

tabelle.put (svnr, b);
System.out.println(tabelle);

SO funkts. aber nicht!

Ausgabe ist Person@12443f3; oder sowas in der Richtung

dann hab ichs folgendermaßen probiert:

Code:
String vorname = "Hartl";
String nachname = "Mayer";
String svnr = "0123456789";


Person b = new Person(vorname, nachname, svnr);

Hashtable tabelle = new Hashtable();

tabelle.put (svnr, b.Vorname()+""+b.Nachname()+""+b.Svnr());
System.out.println(tabelle);

Vorname(),Nachname() & Svnr() sind jeweils Methoden der Klasse Person die jeweils einen String retunieren!
Also Vorname() liefert Vorname und so weiter...
so dann funkts!
Ausgabe ist 0123456789 = {HartlMayer0123456789}


Jetzt komm ich zum eigentlichen Problem.

in der Klasse Person befindet sich eine Methode namens int Alter(), die aus der SVnr das Alter errechnet.
Nun versuch ich aus der Hashtabelle die Svnr auszulesen. geht aber nicht. er liefert mir ein Objekt, dieses Objekt kann ich aber nicht an int Alter() weitergeben! Meldung method int Alter() is undefined for Object!

Also er leifert {HartlMayer0123456789}, wie kann ich aus diesem Object die svnr auslesen.

und vorallem in der Angabe steht dass die main Methode ein Objekt der Klasse Person aus einer Datei auslesen soll (ist kein Prob.) und dann als Objekt in die Hashtabelle einlesen soll.

tu ich jetzt mit dem Argument:
Code:
tabelle.put (svnr, b.Vorname()+""+b.Nachname()+""+b.Svnr());
ein Objekt der Klasse Person einlesen, oder
sollte dies so gelöst werden:
Code:
Person b = new Person(vorname, nachname, svnr);
tabelle.put (svnr, b);
wie gesagt, so hab ichs nicht zum laufen gebracht! vielleicht hab ich nur ein kleines Problem ubersehen.

So, mein Posting scheint etwas chaotisch zu sein. Hoffe aber trotzdem dass mir jemand helfen kann!

Lg, Hartl
 
Damit du diese "komische" Ausgabe wegkriegst sollte es genügen in Person toString() zu überschreiben. Dort kannst du ja dann die entsprechenden Informationen zurückliefern.
 
Also das erste Codestuck das du gepostet hast ist gut (bis auf Zeile 12), der Rest weniger.

Die Ausgabe "Person@12443f3" (oder was ähnliches) ist die automatische Variante, wenn du nicht selbst eine Umwandlungsmethode Person->String definiert hast.

Um das zu machen, reicht es die Methode "toString" in Person zu überschreiben:
Code:
public class Person{
  public String toString(){
    return "Hallo, ich bin die Person " + name;
  }
}


Wenn du die Hashtable mit Personen füllst, bekommst du auch Personen zurück, allerdings benötigst du noch einen Cast:
Code:
Hashtable map = ...
map.put( svrn, einePerson );
Person x = (Person)map.get( svrn );
x.machWasPersonenspezifisches();


Nicht unerwähnt bleiben sollte Java5 mit Generics:
Code:
Map<String, Person> map = new Hashtable<String, Person>();
map.put( svrn, einePerson );
Person x = map.get( svrn );
Aber das ist nur so eine Randbemerkung, wie es einfacher geht. :wink:
 
Hey WOW danke leute!

Das Forum ist echt geil!
Kenn ich erst seit Dienstag. Hatte schon eine Frage zuvor gestellt, und beidemal echt schnelll & kompetente Hilfe bekommen!

Danke

Sers, Hartl
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben