Methoden eine Instanz einer eigenen Klasse als parameter übergeben

Streijost

Mitglied
Folgendes Beispiel: Ich möchte gerne Bücher in ein Regal stapeln sie sortieren,herausnehmen,einfügen usw.

[JAVA=42]
public class Buch{

private String buchtitel ="";
private String autor ="";

public Buch(String buchtitel,String autor){
this.buchtitel=buchtitel;
this.autor = autor;
}
// einige getter/setter methoden

public String getBuchtitel(){}
public String getAutor(){}
public void setBuchtitel(){}
public void setAutor(){}
}
[/code]

Hier ist das Regal was die Bücher nach kategorie einordnet.

[JAVA=42]
public class Regal{

private HashMap<Buch,String>buchRegal;

public Regal(){
buchRegal = new HashMap<Buch,String>();
}


//methoden

public void putBuch(Buch b, String Kategorie){}
public void deleteBuch(Buch b){}
public String kategorie_von_Buch(Buch b){}
public List buecher_der_Kategorie(String Kategorie){}
public void print_regal_Inhalt(){};

}
[/code]

[JAVA=42]
public class RegalTest(){

private static Regal buecherwurm = new Regal();

public static void main(String[] args){
buecherwurm = add(new Buch("lili lala","rosalie"),"Drama");
buecherwurm.print_regal_Inhalt(){};
public String kategorie_von_Buch(Buch b){}
}

}
[/code]

Ich denke das reicht um mein folgendes Problem zu veranschaulichen.

1.) bei folgender Methode bekomme ich die Ausgabe: [Buch@60r4r6g=Drama]...das was mach stört ist die linke Seite vom "="-Operator da sollte eig. Titel,Autor vom Buch stehen.
[JAVA=42] buecherwurm.print_regal_Inhalt(){}; [/code]


2.)ich tue mich dabei schwere ein Instanz von Buch als Parameter zu uebergeben, da wuerde es mich freuen wenn mir da jemand hilft. [JAVA=42] public String kategorie_von_Buch(Buch b){} [/code]

Ich bedanke mich schon vorweg fuer eure Zeit die ihr euch zum durchlesen meiner Frage genommen habt.
 
Überschreibe toString von deinem Buch, dann kannst du bestimmen, was ausgegeben wird.
P.S. dein Coding Stil solltest du mal ausbessern:
- Methoden immer lowerCamelCase: print_regal_Inhalt -> printRegalInhalt
 
Überschreibe toString von deinem Buch, dann kannst du bestimmen, was ausgegeben wird.
P.S. dein Coding Stil solltest du mal ausbessern:
- Methoden immer lowerCamelCase: print_regal_Inhalt -> printRegalInhalt

ok das werde ich mir merken, wegen der toString() methode ich habe sie bisher nirgends aufgerufen, deswegen weiß ich nicht in wieweit sie meine methode print_regal_inhalt ändert.
Die methode sieht bei mir so aus.
Java:
public void print_regal_inhalt(){
    System.out.println(buchregal.entrySet());
}
Wenn ich da einen Fehler mach korrigiere mich bitte.
Und wegen meiner zweiten Frage wie würde da der Methodenaufruf ausehen?
 
Mal was Grundlegendes, wenn du "Echte" Objekte nachahmst, solltest du auch alles nachahmen
wenn du ein Regal erstellst , dann ist normalerweise nicht unendlich platz in diesem 😉

demnach solltest du :

- deinem Regal im Konstruktor direkt eine Größe zuweisen.
- bei Überlauf in eine neu erstelltes Regal einsortieren / ein neues Befüllen.
- deine Methoden der Klasse Regal auch so benennen wie die Aktionen die du durchführen willst, den
man "löscht" selten Bücher aus Regalen 😉

z.B

Wenn wir schon bei Deutsch bleiben wollen/müssen 🙂
Java:
public void hinzufügen(Buch b){...}
public void entfernen(Buch b){...}
public Buch herausnehmen(Buch b){...}
public Buch[] regalInhalt(){...}

ansonsten wie schon erwähnt toString der Klasse Buch überschreiben um eine Menschen lesbare Version des Titels oder whatever der deinen Vorstellungen entspricht zu erhalten.
 
Zuletzt bearbeitet:
Überschreibe toString von deinem Buch, dann kannst du bestimmen, was ausgegeben wird.
P.S. dein Coding Stil solltest du mal ausbessern:
- Methoden immer lowerCamelCase: print_regal_Inhalt -> printRegalInhalt

Mal was Grundlegendes, wenn du "Echte" Objekte nachahmst, solltest du auch alles nachahmen
wenn du ein Regal erstellst , dann ist normalerweise nicht unendlich platz in diesem 😉

demnach solltest du :

- deinem Regal im Konstruktor direkt eine Größe zuweisen.
- bei Überlauf in eine neu erstelltes Regal einsortieren / ein neues Befüllen.
- deine Methoden der Klasse Regal auch so benennen wie die Aktionen die du durchführen willst, den
man "löscht" selten Bücher aus Regalen 😉

z.B

Wenn wir schon bei Deutsch bleiben wollen/müssen 🙂
Java:
public void hinzufügen(Buch b){...}
public void entfernen(Buch b){...}
public Buch herausnehmen(Buch b){...}
public Buch[] regalInhalt(){...}

ansonsten wie schon erwähnt toString der Klasse Buch überschreiben um eine Menschen lesbare Version des Titels oder whatever der deinen Vorstellungen entspricht zu erhalten.

Ja ich sehe ein das Regal war nicht die Beste Wahl, es ging nicht um die nachahmung eines Regal das war nur zweckmäßig um mein Problem zu verdeutlichen.

Es geht einfach um einen komplexen Datentypen dessen Klasse zwei Attributen vom typ String besitzt.
dieser k. Datentyp soll einer HashMap als Schlüssel übergeben werden und einem bestimmten Wert zugeordnet bekommen.
nun möchte ich einmal den Inhalt der HashMap Ausgaben der Form: {((Attribut1,Attribut2),String)}
Ich habe die methode toString überladen und alles funktioniert , ich habe aber noch nicht so richtig verstanden wieso.
Buch und Regal haben jeweils eine toString() Methode und ich rufe sie kein einziges mal bewusst auf.
Kannst du mir erklären wie das funktioniert ?
 
Ich habe die methode toString überladen und alles funktioniert , ich habe aber noch nicht so richtig verstanden wieso.

Wie sieht dein Code aus wenn du sie überladen statt überschrieben hast ?

wenn du nun in deiner Hashmap<Buch,String> in der klasse buch die toString methode überschreibst , das diese dir z.B den Title und den author zurückliefert erhälst du z.B folgende ausgaben

Java:
Girls von Ipanema, Dinges Kirchens, Drama

das kommt halt immer drauf an wie du die toString Methode überschreibst , und wie du die Methode zur Ausgabe der Daten gestaltest.
 
Zuletzt bearbeitet:
Wie sieht dein Code aus wenn du sie überladen statt überschrieben hast ?

wenn du nun in deiner Hashmap<Buch,String> in der klasse buch die toString methode überschreibst , das diese dir z.B den Title und den author zurückliefert erhälst du z.B folgende ausgaben

Java:
Girls von Ipanema, Dinges Kirchens, Drama

das kommt halt immer drauf an wie du die toString Methode überschreibst , und wie du die Methode zur Ausgabe der Daten gestaltest.

Ja ich hab sie überschrieben, nicht überladen hatte da was verwechselt.
[JAVA=42]
p String toString(){
return "["+buchtital+", "+autor+"]";
}
[/code]
die Ausgabe ist perfect.
Ich und meine Frage hat sich von selbst geklärt.

Ich bedanke mich bei euch.
 
Java:
return "["+buchtital+", "+autor+"]";

gewöhn dir leerzeichen an 😉 das macht das ganze doch etwas lesbarer

Java:
return "[" + buchtital + ", " + autor + "]"; // buchTitel wäre eine korrekte Variablenbezeichnung

möchtest du mal kein String ausgegeben, z.B eine ISNB Nummer ( meistens vom typ int o.ä)

kannst du dies mit

Java:
String.valueOf(Obj o);

erreichen
 
Zuletzt bearbeitet:
Ok habs mir notiert.
An erster Stellen ...Schreibfehler vermeiden.
An zweiter Stelle Methodennamen lowerUpperCase
An dritter Stelle Leerzeichen machen alles übersichtlicher.

Jetzt noch eine Frage gibt es hier im Forum eine "Danke"-Funktion bzw einen Button ich finde den nicht würd mich gerne ordentlich bei euch bedanken wollen.
 
Den gibt's erst ab 8 Beiträgen 😉
Denk auch immer daran das du Methoden / Variablen immer möglichst aussagekräftig benennst, das du und andere immer gleich siehst für was genau diese stehen.
 

Zurück
Oben