Seite 15 von 25 ErsteErste ... 5111213141516171819 ... LetzteLetzte
Ergebnis 211 bis 225 von 369

Thema: Ein Narr lernt Java

  1. #211
    Macht Musik Avatar von Peregrin_Tooc
    Registriert seit
    21.05.05
    Ort
    St. Ingbert
    Beiträge
    11.144
    Ehrlich gesagt ist Vererbung da klassisch Kostet ja nicht viel.
    Zitat Zitat von Leonard Bernstein
    This will be our reply to violence:
    to make music more intensely,
    more beautifully,
    more devotedly than ever before.
    Meine Stories:
    Civ VI aus der Sicht von Civ IV BTS, englischer Weltraumsieg auf König
    Der Erste Kaiser wieder aufgenommen

  2. #212
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Sieht doch ganz gut aus. Mit diesem equals() und hashCode(), läuft es, oder? Für das Erstellen des neuen Objektes beim Handeln kannst du ja noch eine clone-Methode spendieren.
    Geändert von Ramkhamhaeng (20. März 2013 um 21:50 Uhr)

  3. #213
    Beyond Mars Avatar von [VK]
    Registriert seit
    05.02.08
    Beiträge
    59.566
    Zitat Zitat von Ramkhamhaeng Beitrag anzeigen
    Sieht doch ganz gut aus. Mit diesem equals() und hashtag(), läuft es, oder? Für das Erstellen des neuen Objektes beim Handeln kannst du ja noch eine clone-Methode spendieren.
    Nein, es sind immer noch 2 unterschiedliche Hashwerte

    PHP-Code:
        static public enum WARETYPE 
            
    NONE(0)    ,
            
    WOOD(1)    ,
            
    STONE(2)    ,
            
    METAL(3);    
            
            private 
    int id;
            
            
    WARETYPE(int id){
                
    this.id id;
            }
            
            public 
    int getId(){
                return 
    this.id;
            }
            
        } 
    Vielleicht stimmt ja etwas an meiner Enum nicht

    @ Vererbung: Ist das nicht eher umständlich? Ich meine aktuell müsste ich nur einen neuen Enum bei den Konstanten hinzufügen, bei Vererbung müsste ich statt den enums nee neue Klasse hinzufügen

    Und wie sehe das ganze aus wenn ich gar die möglichen Waren aus einer Datei lesen möchte. Ich kann ja bei Vererbung schlecht während der Laufzeit eine neue Klasse erstellen.

  4. #214
    Ausgetreten
    Gast
    Zitat Zitat von [VK] Beitrag anzeigen

    Wie gesagt, gibt es eine bessere Möglichkeit die Dinger gescheit zu verwalten? Sehe halt aktuell nicht wirklich 'nen Vorteil darin für jede Ressource nee eigene Klasse zu erstellen...
    Na, du übergibst dann halt das Objekt 'Ressource' und nicht die konkrerte Implementation.

  5. #215
    Registrierter Benutzer
    Registriert seit
    04.04.09
    Beiträge
    5.069
    Du kannst auch schlecht 'ne neue enum (bzw. 'n Eintrag dadrin) erstellen. (Und sowieso, was willst du da einlesen - entweder, du musst das ganze Zeug dafür 'generisch' basteln, oder du hast sowieso schon alles. (Ist verständlich, was ich meine?))
    Vererbung ist minimal umständlicher, als die enum erweitern, aber... nehmen tut sichs nicht viel. (Halt neue Datei, code kopieren, und Namen + ID anpassen)

    Du hast hashcode unterschiedlich geschrieben. (Java heißt hashCode, deine Methode heißt hashcode) Eventuell liegts dadran.

    /e Du musst dir halt mal klar werden, was und wie du willst. (bzw. was du (wirklich) brauchst. )

  6. #216
    Ausgetreten
    Gast
    Zitat Zitat von [VK] Beitrag anzeigen
    @ Vererbung: Ist das nicht eher umständlich? Ich meine aktuell müsste ich nur einen neuen Enum bei den Konstanten hinzufügen, bei Vererbung müsste ich statt den enums nee neue Klasse hinzufügen

    Und wie sehe das ganze aus wenn ich gar die möglichen Waren aus einer Datei lesen möchte. Ich kann ja bei Vererbung schlecht während der Laufzeit eine neue Klasse erstellen.
    Du benuzt nur die Oberklasse!

  7. #217
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Zitat Zitat von Quietsch Beitrag anzeigen
    Du hast hashcode unterschiedlich geschrieben. (Java heißt hashCode, deine Methode heißt hashcode) Eventuell liegts daran.
    Adlerauge!

  8. #218
    Beyond Mars Avatar von [VK]
    Registriert seit
    05.02.08
    Beiträge
    59.566
    Zitat Zitat von Quietsch Beitrag anzeigen
    Du kannst auch schlecht 'ne neue enum (bzw. 'n Eintrag dadrin) erstellen. (Und sowieso, was willst du da einlesen - entweder, du musst das ganze Zeug dafür 'generisch' basteln, oder du hast sowieso schon alles. (Ist verständlich, was ich meine?))
    Vererbung ist minimal umständlicher, als die enum erweitern, aber... nehmen tut sichs nicht viel. (Halt neue Datei, code kopieren, und Namen + ID anpassen)

    Du hast hashcode unterschiedlich geschrieben. (Java heißt hashCode, deine Methode heißt hashcode) Eventuell liegts dadran.
    Hascode stimmt jetzt überein

    Aber die Equals Methode gibt jetzt immer noch false aus.

    PHP-Code:
            public boolean equals(Object w){
                
    boolean b false;
                if (
    instanceof Ware.WareId) {
                    if (((
    Ware.WareIdw).getType().equals(this.getType()) && ((Ware.WareId)w).getQuality() == this.getQuality()) {
                        
    true; } }
                return 
    b;
            } 
    Hab sie schon von WareId zu Object geändert und


    Einfach hashCode überprüfen will ich eigentlich nicht, wegen möglichen Kollisionen...

    /e Du musst dir halt mal klar werden, was und wie du willst. (bzw. was du (wirklich) brauchst. )
    Naja, will ein bisschen Programmieren üben

  9. #219
    Ausgetreten
    Gast
    this.getType? this.get Quality?

    Mach doch if w.instanceof(Holz){ w.getQuality() }

  10. #220
    Registrierter Benutzer
    Registriert seit
    04.04.09
    Beiträge
    5.069
    Und das soll genau was bringen?

    Zitat Zitat von Ramkhamhaeng Beitrag anzeigen
    Adlerauge!
    Vor allem hat mir eclipse kein "da fehlt ein @Override" ausgegeben.


    Zitat Zitat von [VK] Beitrag anzeigen
    Naja, will ein bisschen Programmieren üben
    Das kommt jetzt unerwartet.


    Was ich damit meine (also, nicht, dass ich das von mir kennen würde ): Das Ganze wirkt sehr nach "einfachdrauflosundsehenwasrauskommt" - Was sich gerade bei irgendwas minimal komplexerem sehr schnell rächt.
    Überleg dir halt erstmal, was du wie machen willst. Dann sollte dir auch klarer werden, ob enum, Vererbung, oder... irgendwas anderes.

    ... hach, das lässt sich so schön sagen - irgendwann werd' ich mich auch mal dran halten.


    Funktioniert das instanceof da? (Also, geht er ins innere if rein?)

  11. #221
    Ausgetreten
    Gast
    Zitat Zitat von Quietsch Beitrag anzeigen
    Und das soll genau was bringen?
    Also erst testet er auf instancesOf (WareID) - das kann er überspringen, wenn er eine Oberklasse hat - und dann testet er noch auf getType...

  12. #222
    Registrierter Benutzer
    Registriert seit
    04.04.09
    Beiträge
    5.069
    Wenn er eine Oberklasse hätte, ja. Dafür müsste er aber auch wieder wissen, was er will.

    Er testet ob type und quality gleich sind (und, ob beide Objekte die richtige Klasse haben) - und alles muss er (mal davon ausgehend, dass type und quality gleich sein sollen).

    /e Bei mir tut die equals Methode aber das was sie soll.

  13. #223
    Beyond Mars Avatar von [VK]
    Registriert seit
    05.02.08
    Beiträge
    59.566
    Also jetzt geht's anscheinend, aber ich hab keine Ahnung warum

    Bei meinen Tests zeigt

    boolean resa = s.getWares().containsKey(new Ware.WareId(Constants.WARETYPE.METAL, 2));

    immer: false an, später geht es aber trotzdem durch

  14. #224
    Registrierter Benutzer Avatar von alpha civ
    Registriert seit
    22.07.06
    Beiträge
    16.757
    Zitat Zitat von [VK] Beitrag anzeigen

    @ Vererbung: Ist das nicht eher umständlich? Ich meine aktuell müsste ich nur einen neuen Enum bei den Konstanten hinzufügen, bei Vererbung müsste ich statt den enums nee neue Klasse hinzufügen

    Und wie sehe das ganze aus wenn ich gar die möglichen Waren aus einer Datei lesen möchte. Ich kann ja bei Vererbung schlecht während der Laufzeit eine neue Klasse erstellen.
    Es ist immer eine Frage der Abhängigkeiten. Je weniger die Klassen sich gegenseitig kennen müssen, umso besser.
    enums haben den Nachteil, das sie statisch sind, ihre Werte müssen zur Kompilerzeit bekannt sein.

    Das erste, was man berücksichtigen sollte, ist die Trennung der Daten von der Programmlogik, die mit diesen Daten arbeiten soll.
    Warum verwendest du nicht das, was Civ im Prinzip macht? Du erstellst eine Info-Klasse, die die Daten einer Ware verwaltet (die Daten könnten aus einer XML-Datei stammen, wie Civ das macht). Identifizieren kann man die einzelnen Waren anhand ihrer Bezeichnung (z.B. STONE).
    Man benötigt dann eine Klasse, die die Info-Objekte verwaltet. Das führt dann im Prinzip auf eine Hashtabelle, die Strings (die Bezeichnungen) auf das jeweilige Info-Objekt abbildet. Für Strings braucht man dann keine eigene Hashfunktion mehr.

    Vererbung ist nur dann sinnvoll, wenn jede Ware ein eigenes Verhalten haben muss.

  15. #225
    Beyond Mars Avatar von [VK]
    Registriert seit
    05.02.08
    Beiträge
    59.566
    Zitat Zitat von alpha civ Beitrag anzeigen
    Es ist immer eine Frage der Abhängigkeiten. Je weniger die Klassen sich gegenseitig kennen müssen, umso besser.
    enums haben den Nachteil, das sie statisch sind, ihre Werte müssen zur Kompilerzeit bekannt sein.

    Das erste, was man berücksichtigen sollte, ist die Trennung der Daten von der Programmlogik, die mit diesen Daten arbeiten soll.
    Warum verwendest du nicht das, was Civ im Prinzip macht? Du erstellst eine Info-Klasse, die die Daten einer Ware verwaltet (die Daten könnten aus einer XML-Datei stammen, wie Civ das macht). Identifizieren kann man die einzelnen Waren anhand ihrer Bezeichnung (z.B. STONE).
    Man benötigt dann eine Klasse, die die Info-Objekte verwaltet. Das führt dann im Prinzip auf eine Hashtabelle, die Strings (die Bezeichnungen) auf das jeweilige Info-Objekt abbildet. Für Strings braucht man dann keine eigene Hashfunktion mehr.

    Vererbung ist nur dann sinnvoll, wenn jede Ware ein eigenes Verhalten haben muss.
    Hmm, an sowas dachte ich eigentlich ursprünglich, wusste aber nicht wie genau das gemacht wird. Hast du da vielleicht nen Link?

Seite 15 von 25 ErsteErste ... 5111213141516171819 ... LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •