Methoden größe zweier tiere vergleichen

wondergirl

Neues Mitglied
hallo leute
hoffe ihr könnt mir weiterhelfen

es geht um tiere die andere tiere besuchen.
jedes tier hat eine größe und eine fressart.

hab für beide attribute enums erstellt.
größe: winzig, klein, mittel, groß und riessig
art: pflanzenfresser, fleischfresser, allesfresser

nun sollte ich abfragen in einer methode meet(), wenn das aktuelle tier kein pflanzenfresser ist und größer als das besuchte wird das besuchte aufgefressen

mein ansatz war

Java:
public String meet(Animal animal){
if(this.kind != Kind.PLANTEATER){
if(this.size > animal.size)

aber das wird nicht funktionieren weil die größe ja nicht vom typ int ist. wie gehe ich dann vor??

vielen dank
 
B

BOBOHelp

Gast
hallo,

ein wenig mehr java-code musst du schon liefern, um eine optimale lösung zu besprechen
 

AlexSpritze

Bekanntes Mitglied
Wenn du ein Enum Size hast:

Java:
public static enum Size{
    TINY, SMALL, MEDIUM, BIG, HUGE;
  }

Dann kannst du die einzelnen Elemente so vergleichen:

Java:
if(this.size.ordinal() > animal.size.ordinal())

Code:
ordinal()
gibt dir den Index des Enums zurück, also für TINY 0, für MEDIUM 2, usw. Also die Position an der es definiert wurde. Dafür muss die Aufzählung natürlich aufsteigend sortiert sein.

Andererseits kannst du auch explizit einen Wert bei dem Enum mit übergeben.

Java:
  public static enum Size {

    TINY(1), SMALL(10), MEDIUM(15), BIG(30), HUGE(50);
    private final int size;

    private Size(int size) {
      this.size = size;
    }

    public int getSize() {
      return size;
    }
  }
 
M

Marcinek

Gast
Die Enums sind in einer festen Reihenfolge hinterlegt. du kannst die Position dessen als Sortierung verwenden.
 
B

bygones

Gast
ich wuerde nicht auf die [c]ordinal[/c] von einem enum irgendeine weitere logik aufsetzen, sie hat nix mit einem attribut des enums zu tun.

so wie AlexSpritze in dem 2. bsp zeigt und es ueber eine instanzvariable macht, ist es richtig
 

Andreas29

Bekanntes Mitglied
Hi,

ich stimme bygones voll und ganz zu. Und vielleicht sollte man noch ein paar Worte der Erklärung hinzufügen:
Wenn du dich in deiner Vergleichsfunktion auf das ordinal-Attribut eines enums verlässt, ist diese Methode direkt abhängig davon, in welcher Reihenfolge die enums in der Klasse (dem Enum) definiert werden. Dies ist spätestens dann schlecht, wenn du mal ein größeres Projekt entwickelst, evtl sogar mit mehreren Programmierern. Stell dir mal vor, du stellst deine Methode anderen Menschen zur Verfügung und berufst dich in deinem Vergleich auf das ordinal. Jetzt kommt irgendwer auf die Idee und sagt sich:
Die Reihenfolge in einem enum ist ja für den Rest des Programmes egal, ich selbst fühle mich aber besser, wenn die Elemente alphabetisch sortiert sind. Für dein Programm würde das bedeuten, dass ein Huge-Tier auf einmal von einem small-Tier gefressen werden kann. Nicht schön, oder?

Grüße,
Andreas
 

Marco13

Top Contributor
Einerseits stimmt das... andererseits sind Enums von Haus aus Comparable, und verlassen sich auch auf ihr ordinal... Die Reihenfolge IST wichtig, und IMHO macht derjenige was falsch, der sie unbedacht ändert.
 
B

bygones

Gast
Einerseits stimmt das... andererseits sind Enums von Haus aus Comparable, und verlassen sich auch auf ihr ordinal... Die Reihenfolge IST wichtig, und IMHO macht derjenige was falsch, der sie unbedacht ändert.

nur weil sie es sind halte ich es dennoch fuer falsch dem ordinal weitere semantik zu geben. Jegliche Semantik eines enums sollte in einer eigenen Variable ausgedrueckt werden....

und eben die Annahme das die Reihenfolge der Enums eine Bedeutung hat finde ich schon bedenklich, vor allem wenn sie irgendwie implizit geschieht.
 

Andreas29

Bekanntes Mitglied
Hi,

ich gebe bygones recht. Wenn ich ein enum sehe, gehe ich immer davon aus, dass es dem verwendeten Programm egal ist, in welcher Reihenfolge die Werte im Sourcecode stehen. Die Programmausführung sollte von solchen Details grundsätzlich unabhängig sein, soweit es möglich ist. Und hier ist es möglich.

Auch die Tatsache, dass enums von Haus aus über ihr ordinal-Attribut comparable sind, ändert nichts an dieser Tatsache. Der TO möchte eine bestimmte Reihenfolge sicherstellen und dies geht zuverlässig nur, wenn ich das enum über ein entsprechendes Attribut erweitere (wie AlexSpritze in seinem 2. Beispiel gezeigt hat). Alles andere wäre meiner Meinung nach unsauber und ein Hack. Und man sollte gerade am Anfang seiner Programmierlaufbahn darauf achten, möglichst sauber zu arbeiten.

Grüße,
Andreas
 

Marco13

Top Contributor
Unabhängig von der Frage, ob eine Enum für die Größe in diesem Fall die Ideallösung ist, und unabhängig davon, ob man sich in diesem Fall auf ordinal verlassen sollte: Wer die Reihenfolge von enum-Konstanten ändert, muss damit rechnen, etwas kaputt zu machen. Schon allein wenn an anderer Stelle EnumSet (Java 2 Platform SE 5.0) verwendet wird (so wie es auch in der Beispielanwendung dieser Methode auf Enums beschrieben ist). Klassische Fälle, wo das verwendet wird, dürften LogLevel sein (z.B. auch in der Google App Engine), wo man davon ausgeht, dass "ERROR" einen höheren ordinal hat als "DEBUG". Man mag es als unangebrachten Tribut (oder "Altlast"?) von C++-Enums bezeichnen, aber die Reihenfolge bei der Deklaration hat nun einmal eine Bedeutung, und darf nicht einfach unbedacht geändert werden. DAS einem Anfänger klarzumachen ist wichtiger, als ihm von der Verwendung von ordinal oder der eingebauten Vergleichbarkeit abzuraten. Und wer letzteres als "Hack" bezeichnen will, sollte das vielleicht mal den Sun/Oracle/Google... Enwicklerteams klarmachen ;)
 

Marco13

Top Contributor
Vielleicht hätte ich den letzten Satz weglassen sollen, da er jetzt offenbar dazu beiträgt, dass der Rest des Beitrags nicht zur Kenntnis genommen wird.

Die Reihenfolge der enum-Konstanten hat eine Semantik, und sollte nicht unbedacht geändert werden.

Ob man sie ausnutzt, bleibt jedem selbst überlassen. Die 'range'-Methode deutet IMHO darauf hin, dass das kein illegitimer Hack ist, sondern für die Verwendung so vorgesehen. (Und der java-Quellcode des JDK6 enthät immerhin 73 mal das Wort "Hack" ;) )

EDIT @jule37: Enums SIND ja schon Comparable - und sie vergleichen sich selbst auf Basis ihrer .ordinal(), d.h. entsprechend ihrer Deklarationsreihenfolge....
 

jule37

Aktives Mitglied
[...] EDIT @jule37: Enums SIND ja schon Comparable - und sie vergleichen sich selbst auf Basis ihrer .ordinal(), d.h. entsprechend ihrer Deklarationsreihenfolge....

perfekt... dann kann man ja direkt die compareTo operation des enums verwenden und muss nix mehr groß coden. die einfachste lösung ist immer die beste.

aber noch viel einfacher wäre es vielleicht anstatt einer enum int konstanten zu nehmen

Java:
public class Tier {
    public static final int KLEIN = 0;
    public static final int MITTEL = 1;
    public static final int GROSS = 2;
    public static final int RIESIG = 3;

    private int size;
    // ...

    public boolean isBiggerThan(Tier other) {
        return this.size > other.size
    }

das ist wirklich einfach und m.E. auch sauber, weil jeder leser sofort versteht was vor sich geht.
 
B

bygones

Gast
Vielleicht hätte ich den letzten Satz weglassen sollen, da er jetzt offenbar dazu beiträgt, dass der Rest des Beitrags nicht zur Kenntnis genommen wird.

Die Reihenfolge der enum-Konstanten hat eine Semantik, und sollte nicht unbedacht geändert werden.

Ob man sie ausnutzt, bleibt jedem selbst überlassen. Die 'range'-Methode deutet IMHO darauf hin, dass das kein illegitimer Hack ist, sondern für die Verwendung so vorgesehen. (Und der java-Quellcode des JDK6 enthät immerhin 73 mal das Wort "Hack" ;) )
ich meine auch "nur" dass es gefaehrlich ist und ich fuer neue erstellte enums diese Semantik niemals einsetzen wuerde. Man kann das ja noch bei ordinalen Enums einigermassen einsehen, aber bei anderen ist es nicht sehr intuitiv.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T sortierung der eingabe nach größe Java Basics - Anfänger-Themen 5
S Java Client-je nach Heap Size Größe startet Applikation oder nicht Java Basics - Anfänger-Themen 4
J Größe eines Strings in Pixel Java Basics - Anfänger-Themen 18
M Seltsame Bytecode-Größe Java Basics - Anfänger-Themen 22
C initialisieren eines arrays richtiger Größe und mit geeignetem Datentyp Java Basics - Anfänger-Themen 26
J JScrollePane größe anpassen Java Basics - Anfänger-Themen 4
G Bubblesort Array der Größe 10 Java Basics - Anfänger-Themen 1
Kawastori Größe eines Arrays bestimmen Java Basics - Anfänger-Themen 13
D Probleme mit JFrame und der Größe Java Basics - Anfänger-Themen 8
O ADT Graph nach größe Abfragen Java Basics - Anfänger-Themen 42
G Benutzereingaben durch Zeilenumbruch trennen und in Array individueller Größe speichern Java Basics - Anfänger-Themen 20
T JLabel hat falsche größe Java Basics - Anfänger-Themen 1
H Swing Button hat falsche Größe Java Basics - Anfänger-Themen 5
D JPanel passt die Größe nicht an Java Basics - Anfänger-Themen 22
E Array-Größe anpassen Java Basics - Anfänger-Themen 1
Z ArrayList direkt feste Größe mitgeben Java Basics - Anfänger-Themen 13
R Verschachtelte Arraylist und deren Größe auslesen Java Basics - Anfänger-Themen 7
D Größe der Zahlenkombinationen eines Arrays begrenzen Java Basics - Anfänger-Themen 0
V Die die aktuelle Größe zusätzlich in einem Label angezeigt wird Java Basics - Anfänger-Themen 11
J Liste der Größe nach sortieren Java Basics - Anfänger-Themen 2
P Größe der BufferStrategy in der Window-Klasse Java Basics - Anfänger-Themen 5
S String nach Größe sortieren Java Basics - Anfänger-Themen 6
O Größe von Objekten Java Basics - Anfänger-Themen 5
H Erste Schritte Größe eines 2 dimensionalen Arrays ausgeben Java Basics - Anfänger-Themen 6
M Feste Größe des JFrames - Problem mit Dimension Java Basics - Anfänger-Themen 6
S 2D-Spiel im Vollbild an größe anpassen? Java Basics - Anfänger-Themen 3
1 Größe einer zirkulären Liste bestimmen .. ? Java Basics - Anfänger-Themen 2
S JSlider Schritt Größe Java Basics - Anfänger-Themen 5
D Ausgabefenster größe festlegen Java Basics - Anfänger-Themen 3
P JTabel größe ändern und button anzeigen Java Basics - Anfänger-Themen 5
M Größe eines Buttons festlegen Java Basics - Anfänger-Themen 4
L JLabel Icon Größe anpassen Java Basics - Anfänger-Themen 11
S Datentypen und ihre Größe Java Basics - Anfänger-Themen 21
P JFrame Component automatische Größe verhindern Java Basics - Anfänger-Themen 2
L 3 Zahlen einlesen und nach der Größe Sortieren Java Basics - Anfänger-Themen 5
A Bildgröße automatisch auf JLabel Größe konvertieren Java Basics - Anfänger-Themen 9
B JTabbedPane größe der Tabs ändern Java Basics - Anfänger-Themen 6
M Größe einer Datei via. Link ermitteln Java Basics - Anfänger-Themen 9
T Erste Schritte Textfeld übernimmt Größe nicht Java Basics - Anfänger-Themen 11
W JButton in gleiche Größe bringen Java Basics - Anfänger-Themen 4
A Größe von Bild festlegen Java Basics - Anfänger-Themen 3
E Buchstaben nach Größe vergleichen Java Basics - Anfänger-Themen 4
M OOP Methode überschreiben mit String-Paramter unterschiedlicher Größe? Java Basics - Anfänger-Themen 19
RySa Input/Output aktuelle größe des BufferedWriters ? Java Basics - Anfänger-Themen 5
T ArrayIndexOutOfBoundsException - Problem mit Array-Größe Java Basics - Anfänger-Themen 4
L Größe von Ordner wiedergeben Java Basics - Anfänger-Themen 4
J Array Größe über Kommandozeile eingeben Java Basics - Anfänger-Themen 3
K GUI - Größe nicht änderbar Java Basics - Anfänger-Themen 7
B Tabelle, Größe der Komponenten Java Basics - Anfänger-Themen 2
Luk10 Größe von Objekten Java Basics - Anfänger-Themen 4
A Datentypen Größe eines mehrdimensionales Arrays Java Basics - Anfänger-Themen 4
E Titel und Größe vom JFrame setzen Java Basics - Anfänger-Themen 6
A Bild ändert Größe des Gridbag Layouts Java Basics - Anfänger-Themen 4
M Größe einer Konsole ermitteln Java Basics - Anfänger-Themen 2
D Zylinder/Eigenschaften (auf Größe) vergleichen Java Basics - Anfänger-Themen 16
c_sidi90 Größe von Dateien aus File Array ermitteln Java Basics - Anfänger-Themen 12
N zweidimensionales array größe bestimmen Java Basics - Anfänger-Themen 1
I Schriftart / farbe / größe bei Emailversand ändern Java Basics - Anfänger-Themen 17
K Problem mit Applet Größe Java Basics - Anfänger-Themen 5
Luk10 Größe eines Arrays ausgeben Java Basics - Anfänger-Themen 4
B JButton Größe einstellen? Java Basics - Anfänger-Themen 3
T Wie kann ich einem Graph in nem JPanel eine fixe Größe geben? Java Basics - Anfänger-Themen 6
MisterSeven Java Swing - Wie Frame größe festlegen?! Java Basics - Anfänger-Themen 10
M größe JEditorPane Java Basics - Anfänger-Themen 5
radiac Von einem Bild die Größe rausfinden??? Java Basics - Anfänger-Themen 9
J 2Dimensionales Array, Größe durch Eingabe bestimmen Java Basics - Anfänger-Themen 9
S Eclipse Java Applet größe ändern aber wie? Java Basics - Anfänger-Themen 5
M array - größe Java Basics - Anfänger-Themen 8
Z TextArea Größe festlegen Java Basics - Anfänger-Themen 22
K Größe, mehrdimensionales Array Java Basics - Anfänger-Themen 6
B ComboBox Größe ändern Java Basics - Anfänger-Themen 4
P Größe eines JButton? Java Basics - Anfänger-Themen 17
C die Klasse File - die größe der Datei anzeigen Java Basics - Anfänger-Themen 12
Q Vector verändert trotz final seine Größe Java Basics - Anfänger-Themen 5
-horn- Array mit nicht fixer Größe möglich? Nachträgliches befüllen Java Basics - Anfänger-Themen 10
C Größe einer Referenz ? Java Basics - Anfänger-Themen 16
G JButton LookAndFeel - Größe ändern Java Basics - Anfänger-Themen 2
D File(jpeg) größe ändern und dann zu einen byte[] Java Basics - Anfänger-Themen 7
F InternalFrame, Anpassung der Größe Java Basics - Anfänger-Themen 10
F Größe von Grafik-Containern verschieben Java Basics - Anfänger-Themen 2
K globales array - größe im Konstruktor Java Basics - Anfänger-Themen 3
N Integer Array der Größe nach ordnen Java Basics - Anfänger-Themen 1
I Swing-Komponenten-Größe im GridBagLayout beschränken Java Basics - Anfänger-Themen 2
G Button Größe anpassen Java Basics - Anfänger-Themen 4
R textfeld größe definieren Java Basics - Anfänger-Themen 2
B Java Array List größe auslesen zur Suchfunktion Java Basics - Anfänger-Themen 5
K Strings der Größe nach ordnen Java Basics - Anfänger-Themen 5
S Auf JButtonBar komponenten ausrichten, größe festlegen? Java Basics - Anfänger-Themen 5
M größe für Applet definieren Java Basics - Anfänger-Themen 4
G JList größe verändert sich Java Basics - Anfänger-Themen 2
G max größe array Java Basics - Anfänger-Themen 10
G Größe von JFrame unveränderbar Java Basics - Anfänger-Themen 7
G Maximale Größe von klasse Java Basics - Anfänger-Themen 7
G Größe von Box festlegen Java Basics - Anfänger-Themen 7
G die Größe eines Button bestimmen ? Java Basics - Anfänger-Themen 4
N Größe von Buttons Java Basics - Anfänger-Themen 3
K Größe des nötigen Array erraten Java Basics - Anfänger-Themen 8
G Aktuelle Heap-Größe auslesen? Java Basics - Anfänger-Themen 3
A JPanel(mit JScrollBar) größe ändern Java Basics - Anfänger-Themen 9
B JTable - Einstellen der Größe bzw. der Länge Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben