enum

JavaForever

Grünschnabel
Seid gegrüßt verehrte Mitprogrammierer und Mitprogrammiererinnen!
Etwas weniger geschwollen ausgedrückt: Guten Tag!
Mein Problem ist folgendes:
Ich habe eine Klasse Definitionen erstellt um mal die Sache mit den Enums zu testen:
Code:
public class Definitionen{
enum Ziffer{1,2,3,4,5,6,7,8,9,0};
Ziffer a = 3;
public static void main(String[] args){
System.out.print(""+a);
}
}
Daraufhin habe ich gleich 5 Fehlermeldungen erhalten!
Vielen Dank im voraus!:)
 
Bitteschön:

Definitionen.java:2:13: <identifier> expected
enum Ziffer{1,2,3,4,5,6,7,8,9,0};
^
Definitionen.java:2:15: '}' expected
enum Ziffer{1,2,3,4,5,6,7,8,9,0};
^
Definitionen.java:3:1: class, interface, or enum expected
Ziffer a = 3;
^
Definitionen.java:4:15: class, interface, or enum expected
public static void main(String[] args){
^
Definitionen.java:6:1: class, interface, or enum expected
}
^
5 errors

:confused:
 
Moin,

Seid gegrüßt verehrte Mitprogrammierer und Mitprogrammiererinnen!
Etwas weniger geschwollen ausgedrückt: Guten Tag!
Mein Problem ist folgendes:
Ich habe eine Klasse Definitionen erstellt um mal die Sache mit den Enums zu testen:
Code:
public class Definitionen{
enum Ziffer{1,2,3,4,5,6,7,8,9,0};
Ziffer a = 3;
public static void main(String[] args){
System.out.print(""+a);
}
}
Daraufhin habe ich gleich 5 Fehlermeldungen erhalten!
Vielen Dank im voraus!:)

das was Du da versuchst, kann so nicht klappen, da in Java es Enumerations wie unter C/C++ so nicht gibt ...
Du kannst keine "Ziffer a" deklarieren !

Schau mal hier:
http://www.dpunkt.de/java/Die_Sprache_Java/Die_Sprachelemente_von_Java/25.html#x155
und vor allem (mit Beispiel) :
http://www.dpunkt.de/java/Die_Sprache_Java/Objektorientierte_Programmierung_mit_Java/60.html


Gruß
Klaus
 
So lässt sich der Code ausführen:
Java:
package de.tutorials.javaforever.enums;

public class Definitionen {
    private enum Ziffer {
		_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, ACHT, DREI, EINS, FUENF, NEUN, NULL, SECHS, SIEBEN, VIER, ZWEI
	}

	static Ziffer	a	= Ziffer.DREI;

	public static void main(String[] args) {
		System.out.print(a);
	}
}
Für die Bezeichner in einer enum gelten die selben Regeln, wie für alle anderen Bezeichner, das heißt du kannst nicht einen Bezeichner einfach mit einer Zahl beginnen.
Außerdem werden bei enum-Variablen die Werte durch Zugriff auf die enum gesetzt und nicht wie in C, wo man einfach den Wert hintippt (so wie du das gemacht hattest).
Die Variable a war außerdem nicht static, weshalb die main-Methode auch nicht drauf zugreifen konnte.

PS: Nicht über die Reihenfolge wundern, ich lass Eclipse sortieren ;)

EDIT:
Hab, wie man sieht, noch eigene Konstanten in die enum eingefügt. In der Regel nimmt man auch Wörter anstatt _<Zahl>, ich würde also die Zahlen-Variante einfach weglassen.
 
Zuletzt bearbeitet:
@Akeshihiro
1. Wer hat dir erlaubt meinen Namen als Paketnamen zu verwenden?
2. Die print()-Methode ist mehrmals überladen, in der Tat. Man kann Strings, ints, floats, chars,...u.s.w.
anzeigen doch einfach so ein Wert vom Typ Ziffer anzeigen ohne ihn in einen String zu casten das geht nicht!
 
Ich lege bei Beispielen immer noch die "Besitzer"-packages an, damit man weiß, zu wem sie gehören. Wenn dir das nicht passt, dann kann ich das package im gezeigten Code auch rausnehmen, im meinem Projekt bleibts aber.
Und doch, das geht. Eine der Überladungen lautet nämlich so: void java.io.PrintStream.print(Object obj) und damit sollte klar sein, dass das geht, da bei Objekten implizit die toString-Methode aufgerufen wird. Abgesehn davon hast du kein Cast gemacht, sondern zwei Strings zusammengefügt, nämlich einen Leerstring und das Ergebnis der toString-Methode der enum-Variable a.
 
Das zusammenfügen eines null-Strings und eines anderen Wertes ist doch sozusagen ein Cast!
und die toString()-Methode muss doch in jeder Klasse (sinvoll) überschrieben werden?!
 
Zurück