Programmieren II. Aufzählungstypen (enum) Heusch -- Ratz Institut für Angewandte Informatik

Ähnliche Dokumente
2. Methoden. n Generelles zum Aufruf von Methoden. n Parameterübergabemechanismen (call by value, call by reference)

Enum Aufzählungstypen in Java

Welche Informatik-Kenntnisse bringen Sie mit?

Repetitorium Informatik (Java)

Klassen und Objekte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg

Einstieg in die Informatik mit Java

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

RO-Tutorien 3 / 6 / 12

Programmieren I. Kontrollstrukturen Heusch 8 Ratz Institut für Angewandte Informatik

5. Tutorium zu Programmieren

Programmieren I + II Regeln der Code-Formatierung

Datenbankanwendungsprogrammierung Crashkurs Java

Enumerations und innere Klassen

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

Algorithmen und Programmierung II

Java-Schulung Grundlagen

JAVA - Methoden

Java 7. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Dezember 2011 JAV7

1.2 Attribute und Methoden Aufbau einer Java-Klasse:

3. Anweisungen und Kontrollstrukturen

Java - Zahlen, Wahrheitswerte und Zeichen. Leibniz Universität IT Services Anja Aue

Vorlesung Programmieren

Probeklausur: Programmierung WS04/05

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays)

Java - Zahlen, Wahrheitswerte und Zeichen. Leibniz Universität IT Services Anja Aue

Ein erstes Java-Programm

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Vererbung. Martin Wirsing. Ziele. Vererbung

Programmieren I. Kontrollstrukturen. Heusch 8 Ratz Institut für Angewandte Informatik

5.5.8 Öffentliche und private Eigenschaften

Java Schulung (Java 2 Java Development Kit 5 / 6)

Grundlagen der Informatik Enums, Strings und Arrays

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Einführung in die Java- Programmierung

Die Programmiersprache C Eine Einführung

Javaprogrammierung mit NetBeans. Variablen, Datentypen, Methoden

Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8

Tutorium Rechnerorganisation

Einführung in die Programmierung 1

3 Objektorientierte Konzepte in Java

Objektorientierte Programmierung OOP Programmieren mit Java

Datentypen: Enum, Array, Struct, Union

Theorie zu Übung 8 Implementierung in Java

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

1 Polymorphie (Vielgestaltigkeit)

Javakurs für Anfänger

C# im Vergleich zu Java

Distributed Computing Group

Kapitel 9: Klassen und höhere Datentypen. Klassen und höhere. Objekte, Felder, Methoden. Küchlin/Weber: Einführung in die Informatik

Übung Programmierung WS 2007/08 - Blatt 5

Übungsblatt 7. Was ist die Ausgabe de facto? Entspricht die Ausgabe Ihren Erwartungen?

AuD-Tafelübung T-B5b

Programmierkurs. Manfred Jackel

Primitive Datentypen

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Objektorientierte Programmierung

Objektorientierte Programmierung OOP Programmieren mit Java

Interfaces und Vererbung

Einstieg in die Informatik mit Java

JAVA - Methoden - Rekursion

Java Einführung Methoden. Kapitel 6

1. Der Einstieg in Java. Was heißt Programmieren?

Teil 1: Grundeigenschaften von Rechnern und Software

Java I Vorlesung Objektorientiertes Programmieren

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

3 Objektorientierte Konzepte in Java

4. Datentypen. Einleitung Eingebaute Datentypen. Konversion / Type-Cast. Operatoren. Übersicht Die Datentypen char, float und double Standardwerte

Java Einführung Klassendefinitionen

Einstieg in die Informatik mit Java

Objektorientierte Programmierung. Objektorientierte Programmierung. Klasse. Objekt. Beispiel: Sportfest1. Methode. Eine Einführung mit BlueJ

Programmieren in Java

Java I Vorlesung Vererbung und Sichtbarkeit

Letztes Mal. static int ggt(int a, int b) { if (a == b) return a; else if (a > b) return ggt(a-b,b); else if (a < b) return ggt(a,b-a);

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Objektorientierte Programmierung

CS1005 Objektorientierte Programmierung Bachelor of Science (Informatik)

5.4 Klassen und Objekte

Java: Vererbung. Teil 3: super()

Grundlagen der Objektorientierung

3. Algorithmenentwurf und JAVA. Informatik II für Verkehrsingenieure

Probeklausur: Programmierung WS04/05

5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren:

Klassen mit Instanzmethoden

C# 2000 Expression Beispielcodes für Konsolen- und Formularanwendung

Kontrollstrukturen, Pseudocode und Modulo-Rechnung

Prof. H. Herbstreith Fachbereich Informatik. Leistungsnachweis. Informatik 1 WS 2001/2002

Übersicht. Vorstellung des OO-Paradigmas

Java Einführung Methoden in Klassen

Objektorientierte Programmierung mit Java. Grundlagen Übersicht. Programmiersprachen

Tutorium Java Ein Überblick. Helge Janicke

Java Kurzreferenz Für Fortgeschrittene

Java Kurs für Anfänger Einheit 5 Methoden

Teil 1: Grundeigenschaften von Rechnern und Software

Selbsteinstufungstest Vorkurs Programmieren

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

Ab J2SE 5.0 Unterstützung formatierter Bildschirmausgaben. Mit den Operatoren und Klammern können Boolesche Ausdrücke gebildet werden Beispiel:

Prof. W. Henrich Seite 1

1. Grundlegende Datentypen

Transkript:

Programmieren II Aufzählungstypen (enum) Heusch -- Ratz 11.1 KIT Die Forschungsuniversität in der Helmholtz-Gemeinschaft www.kit.edu

Aufzählungstypen (1) Unter einem Aufzählungstyp versteht man einen selbstdefinierten Datentyp, der nur eine bestimmte (endliche) Menge von Werten umfasst, die explizit aufgezählt werden müssen jeweils (einzeln) als Konstante betrachtet werden können In ihrer Reihenfolge festgelegt sind (Ordinalzahl = Indexwert) deren Anzahl und Werte nach der Erzeugung unveränderlich sind Für die Literale der Konstanten (d.h. die Namen der Konstanten im Quelltext) gelten die gleichen Regeln wie für Bezeichner (Namen). 2

Aufzählungstypen (2) Ab Version 1.5 führt Java mit dem Schlüsselwort enum einen eigenständigen und expliziten Mechanismus zur Definition von Aufzählungstypen ein Es können zwei Arten von Aufzählungstypen unterschieden werden (wobei die erste Art ein Spezialfall der zweiten Art ist): einfache Aufzählungstypen komplexe Aufzählungstypen Ab Java 1.5 3

Einfache Aufzählungstypen (1) Konzeptionell sind Aufzählungstypen Variablen und Attributen einer Klasse gleichgestellt (Aufzählungen lassen sich aber nicht als lokale Variable definieren!) public class EnumTest { enum Season { WINTER, SPRING, SUMMER, FALL ; public static void main(string[] args) { Season s1 = Season.WINTER; // Variable vom Typ Season if (s1 == Season.WINTER) { // Vergleich mit == System.out.println("It's " + s1); Season s2 = Season.WINTER; 4

Einfache Aufzählungstypen (2) Verwendung von Aufzählungstypen entspricht der von primitiven Datentypen Keine Anforderung von Speicherplatz durch new notwendig Compiler verhindert Instanziierung eines Aufzählungstyps Aufzählungsinstanzen haben keinen Vorgabewert bei der Initialisierung Verwendung einer nicht initialisierten Ausprägung führt zu einem Übersetzungsfehler ( variable... might not have been initialized ) Aufzählungsinstanzen besitzen keine Identität (Bei einem Vergleich ist Belegung maßgeblich) 5

Einfache Aufzählungstypen (3) Klassenmethode von enum <T>[] values() liefert ein Array mit allen Elementen <T> valueof(string value) liefert eine enum-konstante Instanzmethoden von enum-konstanten int ordinal() liefert die Ordinalzahl der enum-konstante String tostring() enthält die Zeichenkette (Bezeichner) mit dem die Aufzählungsinstanz belegt wurde boolean equals(object o) liefert true, wenn o und die enum-konstante übereinstimmen, sonst false for (Season s : Season.values()) { System.out.println(s + " has the value " + s.ordinal()); 6

Einfache Aufzählungstypen (3) Nicht identisch sind hingegen Ausprägungen verschiedener Aufzählungstypen, die vermeintlich denselben Wert enthalten, d.h. in deren zur Definition verwendeten Werteliste sich lexikalisch dieselben Einträge finden. Nachfolgende Zuweisung wird bereits durch den Übersetzer (incompatible types) abgelehnt enum SeasonE { WINTER, SPRING, SUMMER, FALL; ; enum SeasonG { WINTER, FRÜHLING, SOMMER, HERBST; ; //... SeasonE s = SeasonG.WINTER; // Compiler-Fehler 7

Einfache Aufzählungstypen (4) Dasselbe gilt auch für den Versuch des Vergleichs der Inhalte zweiter Aufzählungsausprägungen, wie sie durch das nachstehende Codefragment versucht wird. enum SeasonE { WINTER, SPRING, SUMMER, FALL; ; enum SeasonG { WINTER, FRÜHLING, SOMMER, HERBST; ; //... SeasonE s1 = SeasonE.WINTER; SeasonG s2 = SeasonG.WINTER; if (s1==s2) { // Compiler-Fehler //... Auch hier wird bereits zum Übersetzungszeitpunkt durch die Fehlermeldung auf den Fehler hingewiesen: Ausgabe Incompatible operand types SeasonE and SeasonG 8

Komplexe Aufzählungstypen (1) Aufzählungstypen lassen sich wie Klassen ausbauen. Diese Erweiterung erlaubt es, die Elemente des Aufzählungstypen wahlfrei an selbst definierte Eigenschaften zu binden. Die Eigenschaften werden dabei als Attribute des Aufzählungstypen aufgefasst, die durch einen vom Programmierer bereitzustellenden Konstruktor zugewiesen werden. Der Konstruktoraufruf erfolgt automatisch durch das Laufzeitsystem zum Definitionszeitpunkt des Aufzählungstypen für alle Inhaltselemente. 9

Komplexe Aufzählungstypen (2) public enum Planet { // Beachte: enum statt class MERCURY(3.303e+23, 2.4397e6), // Konstantendeklarationen mit Parametern VENUS(4.869e+24, 6.0518e6), // für den Konstruktor (Masse, Radius) EARTH(5.976e+24, 6.37814e6), MARS(6.421e+23, 3.3972e6), JUPITER(1.9e+27, 7.1492e7), SATURN(5.688e+26, 6.0268e7), URANUS(8.686e+25, 2.5559e7), NEPTUNE(1.024e+26, 2.4746e7); // Nach der letzten Konstante public double mass; // Planetenmasse in Kilogramm private double radius; // Radius in Meter public static final double G = 6.67300E-11; // Gravitationskonstante Planet(double mass, double radius) { this.mass = mass; this.radius = radius; // Darf NICHT public sein! double surfacegravity() { // Gravitation an der Oberfläche eines Planeten return G * this.mass / (this.radius * this.radius); double surfaceweight(double othermass) { // Gewicht an der Oberfläche return othermass * this.surfacegravity(); // eines anderen Planeten (N) 10

Komplexe Aufzählungstypen (3) public class PlanetWeight { public static void main(string[] args) { if (args.length!= 1) { System.err.println("Usage: java PlanetWeight <weight>"); System.exit(-1); // Gewicht an Erdoberfläche in Newton double earthweight = Double.parseDouble(args[0]); double mass = earthweight / Planet.EARTH.surfaceGravity(); for (Planet p : Planet.values()) { System.out.printf("Your weight on %s is %f%n",p, p.surfaceweight(mass)); Ausgabe > java PlanetWeight 800 Your weight on MERCURY is 302,206092 Your weight on VENUS is 723,999280 Your weight on EARTH is 800,000000 Your weight on MARS is 302,989747 Your weight on JUPITER is 2024,446020 Your weight on SATURN is 852,812431 Your weight on URANUS is 724,101760 Your weight on NEPTUNE is 910,662458 11

enum-beispiele (1) /** * Farben als "Klasse" */ public enum SimpleColor { WHITE, BLACK, RED, YELLOW, BLUE; // ; ist optional /** * Eine äußere Klasse */ public class Outer { /** * Farben als "innere Klasse" */ public enum SimpleColor { WHITE, BLACK, RED, YELLOW, BLUE for ( SimpleColor s : SimpleColor.values() ){ System.out.println(s); Ausgabe WHITE BLACK RED YELLOW BLUE 12

enum-beispiele (2) /** * Farben mit überschriebener tostring()-methode */ public enum SimpleColorExt { WHITE, BLACK, RED, YELLOW, BLUE; // ; ist hier notwendig @Override public String tostring() { // nur erster Buchstabe groß String s = super.tostring(); return s.charat(0) + s.substring(1).tolowercase(); for ( SimpleColorExt s : SimpleColorExt.values() ){ System.out.println(s); Ausgabe White Black Red Yellow Blue 13

enum-beispiele (3) /** * Farben mit eigenen Codes. So könnte man z.b. zu jeder Farbe auch RAL- * oder RGB-Farbwerte verwalten. */ public enum ComplexColor { WHITE(21), BLACK(22), RED(23), YELLOW(24), BLUE(25); private int code; private ComplexColor(int c) { this.code = c; Nutzung von.values() public int getcode() { return this.code; 14

enum-beispiele (4) Aufzählungstypen lassen sich in switch-anweisungen verwenden: SimpleColor color = SimpleColor.values()[2]; switch (color) { case WHITE: System.out.println("weiß"); break; case BLACK: System.out.println("schwarz"); break; case RED: System.out.println("rot"); break; case YELLOW: System.out.println("gelb"); break; case BLUE: System.out.println("blau"); break; default: System.out.println("andere Farbe"); Wie im 1. Semester / Kontrollstrukturen versprochen! 15

enum-beispiele (5) public class ColorExample { public static void main(string[] args) { // Farbe aufgrund ihres Wertes bestimmen SimpleColor col = SimpleColor.valueOf("BLACK"); System.out.println("Color: " + col); Ausgabe Color: BLACK #BLACK: 1 #RED: 2 #BLUE: 4 // Nummern (Reihenfolge, Zählung beginnt bei 0) bestimmten System.out.println("#" + col + ": " + col.ordinal()); System.out.println("#" + SimpleColor.RED + ": " + SimpleColor.RED.ordinal()); System.out.println("#" + SimpleColor.BLUE + ": " + SimpleColor.BLUE.ordinal()); int ordinal() liefert, das wievielte Element des Aufzählungstyps eine bestimmte Instanz ist. (Die Zählung beginnt wie bei Arrays bei 0) <T> valueof(string s) liefert (sofern vorhanden) die zum String s passende Instanz eines Aufzählungstyps, ansonsten eine IllegalArgumentException 16

Literatur Java-Tutorial für enum http://docs.oracle.com/javase/tutorial/java/javaoo/enum.html 17