API und Kommentare. Javakurs 2014, 4. Vorlesung. Georg Hieronimus. basierend auf der Vorlage von Theresa Enghardt, Mario Bodemann und Sebastian Dyroff

Ähnliche Dokumente
Äußere Form ArrayList Vererbung API. Einführung in Java. Arne Hüffmeier. Michelle Liebers, Dennis Hoffmann. Tilman Lüttje, Jean Wiele

Arrays und Schleifen

Programmieren I + II Regeln der Code-Formatierung

Programmieren I + II Regeln der Code-Formatierung

Tag 4 Repetitorium Informatik (Java)

AuD-Tafelübung T-B5b

Wiederholung Wozu Methoden? Methoden Schreiben Methoden Benutzen Rekursion?! Methoden. Javakurs 2012, 3. Vorlesung

Institut für Informatik und Angewandte Kognitionswissenschaften

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Themen der Übung. Methoden und Wrapperklassen. Vorteile von Methoden. Methoden. Grundlagen

Methoden und Wrapperklassen

GI Vektoren

1 Vom Problem zum Programm

Die Programmiersprache C99: Zusammenfassung

JAVA - Methoden

M. Graefenhan Übungen zu C. Blatt 3. Musterlösung

Primitive Datentypen, Eingaben, Kontrollstrukturen und Methodendeklaration

Programmieren in Java -Eingangstest-

Einstieg in die Informatik mit Java

Tag 4 Repetitorium Informatik (Java)

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Grundlagen und Konzepte von C Datenstrukturen

pue13 January 28, 2017

Die einfachsten Anweisungen

Der Datentyp String. Stringvariable und -vergleiche

Intensivübung zu Algorithmen und Datenstrukturen

Ein erstes Java-Programm

ALP II Dynamische Datenmengen Datenabstraktion

Programmieren in Java

Wie entwerfe ich ein Programm?

Problem: Was ist, wenn der Stapel voll ist? Idee: Erzeuge dynamisch ein grösseres Array und kopiere um. Dynamische Anpassung der Größe

Arbeitsblatt zu Methoden

Probeklausur: Programmierung WS04/05

2 Eine einfache Programmiersprache

Schöner Programmieren

10 Die Programmiersprache C99: Zusammenfassung

Institut für Programmierung und Reaktive Systeme 20. November Programmieren I. 4. Übungsblatt

Repetitorium Informatik (Java)

Wie kann man es verhindern das Rad immer wieder erneut erfinden zu müssen?

Einführung in die Programmierung I. 2.0 Einfache Java Programme. Thomas R. Gross. Department Informatik ETH Zürich

Java für Anfänger Startup Donnerstag. Programmierkurs Manfred Jackel

Java Einführung Programmcode

Programmierpraktikum

Programmierpraktikum Java Entdecken Merkblatt 2

Programmierkonventionen - 1 -

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

Programmierkurs Java

Ein- und Ausgabe. C - Kurs Mario Bodemann. 15. September 2010

5 DATEN Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

Inhaltsverzeichnis. Kapitel i: Schnelleinstieg 13. Kapitel 2: Was sind Programme? 17. Kapitel 3: Wie erstellt man eigene Programme?

Selbststudium OOP7 & ALG2 Auftrag

Tutoraufgabe 1 (Zweierkomplement): Lösung: Programmierung WS16/17 Lösung - Übung 2

Arrays. Arrays werden verwendet, wenn viele Variablen benötigt werden. Der Vorteil in Arrays liegt darin, dass man nur eine Variable deklarieren muss

Übungsblatt 2. Java Vorkurs (WS 2017)

Institut für Programmierung und Reaktive Systeme. Java 3. Markus Reschke

Klausur zur Vorlesung: Einführung in die objektorientierte Programmierung mit Java im Wintersemester 2015/16

Organisatorisches. drei Gruppen Gruppe 1: 10:10-11:40, Gruppe 2: 11:45-13:15 Gruppe 3: 13:20-14:50

Vorkurs Informatik WiSe 17/18

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

Übungen zu Programmieren - Code-Formatierung -

07 Funktionen (Teil I)

Informatik I - Einstiegskurs

Ein- und Ausgabe. C - Kurs Mario Bodemann. 15. September 2010

Funktionen nur wenn dann

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 10

Hello World. Javakurs 2014, 1. Vorlesung. Sebastian Schuck. basierend auf der Vorlage von Arne Kappen. wiki.freitagsrunde.org. 3.

Funktionen in JavaScript

Klausur Fachprüfung Wirtschaftsinformatik Dauer: 2 Stunden. Name:

Sprechen Sie Java? Hanspeter Mössenböck. Tm\ dpunkt.verlag. Eine Einführung in das systematische Programmieren

Funktionen in JavaScript

Übung 9. Quellcode Strukturieren Rekursive Datenstrukturen Uebung 9

Einstieg in die Informatik mit Java

Bitte beachten Sie: Es gibt mehr als einen Lösungsweg. Ihre Lösung kann auch richtig sein, wenn sie nicht mit der hier gezeigten Lösung übereinstimmt.

Probeklausur Informatik 2 Sommersemester 2013

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

String s1, s2; Eine Zuweisung geschieht am einfachsten direkt durch Angabe des Strings eingeschlossen in doppelte Hochkommata:

Fragenkatalog ESOP WS 16/17

Martin Unold INFORMATIK. Geoinformatik und Vermessung

FH Ravensburg-Weingarten Schriftlich Prüfung Programmieren

Javakurs für Anfänger

Java Datentypen und Variablen

Grundlagen der Programmierung Prof. H. Mössenböck. 14. Schrittweise Verfeinerung

Programmierung mit C Zeiger

Eine JAVA Einführung ... Quellcode:... COMA Übung 3. T.Bosse. A.Griewank. Vorschau JAVA Programme Sprachen Kate

Inhaltsverzeichnis. Kurseinheit 1. Kurseinheit 2

Programmiersprachen Einführung in C. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm

Kapitel 12: Induktive

Programmierkurs Java

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein

Institut für Programmierung und Reaktive Systeme 26. April Programmieren II. 10. Übungsblatt

Übungsblatt 2. Java Vorkurs (WS 2015)

Einführung in die Informatik für Hörer aller Fakultäten II. Andreas Podelski Stephan Diehl Uwe Waldmann

Test zu Grundlagen der Programmierung Leitung: Michael Hahsler. 21. November 2003

JAVA für Nichtinformatiker - Probeklausur -

Organisatorisches. Neue Übungsblätter: Nur mehr elektronisch? Abgabe Di, , 14 Uhr bis Do, , 8Uhr

Vorkurs Informatik WiSe 16/17

Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen. Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen

Transkript:

API und Kommentare Javakurs 2014, 4. Vorlesung Georg Hieronimus basierend auf der Vorlage von Theresa Enghardt, Mario Bodemann und Sebastian Dyroff wiki.freitagsrunde.org 6. März 2014 This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 License. 1 / 36

Was bisher geschah... Bisher: So wird das gemacht. Programme schreiben, kompilieren und ausführen Variablen deklarieren, definieren und benutzen Fallunterscheidungen Arrays verwenden Schleifen Methoden 2 / 36

Was bisher geschah... Bisher: So wird das gemacht. Programme schreiben, kompilieren und ausführen Variablen deklarieren, definieren und benutzen Fallunterscheidungen Arrays verwenden Schleifen Methoden Jetzt: So solltet ihr das machen. Kommentare Lesbarkeit von Code Die Java API Komplexe Aufgabenstellungen bearbeiten Testen Externe Bibliotheken nutzen 2 / 36

Inhaltsverzeichnis 1 Schön programmieren Kommentare Lesbarkeit von Code 2 Mit Plan programmieren Von der Aufgabenstellung zum Code Testen 3 Der Datentyp char 4 Die Java API Math String Collections 3 / 36

Inhaltsverzeichnis 1 Schön programmieren Kommentare Lesbarkeit von Code 2 Mit Plan programmieren Von der Aufgabenstellung zum Code Testen 3 Der Datentyp char 4 Die Java API Math String Collections 4 / 36

Kommentare Inlinekommentar // Kommentar b i s zum Ende d e r Z e i l e Oft mitten im Code zu finden meistens ein Hinweis, was an dieser Stelle passiert / Geht ü b e r mehrere Z e i l e n / Blockkommentar Oft oberhalb einer Klasse oder Methode zu finden Meistens eine mehrzeilige Beschreibung dessen, was sie tut Kann außerdem Angaben zu Autor/in, Datum, Aufgabenstellung... enthalten 5 / 36

Anwendung von Kommentaren Beispielklasse MatrixMax mit Kommentaren (1. Hälfte) 1 / K l a s s e M a t r i x O p e r a t i o n e n 2 @author Georg H i e r o n i m u s <g e o r g. h i e r o n i m u s... > 3 4 S t e l l t v e r s c h i e d e n e s t a t i s c h e F u n k t i o n e n f ü r M a t r i z e n b e r e i t. 5 / 6 p u b l i c c l a s s M a t r i x O p e r a t i o n e n { 7 8 / 9 getspaltenmaximum 0 B e r e c h n e t das Maximum j e d e r S p a l t e e i n e r gegebenen M a t r i x 1 und s p e i c h e r t d i e Maxima i n einem neuen A r r a y 2 3 @param m a t r i x 4 x3 M a t r i x 4 @ r e t u r n A r r a y mit dem Maximum d e r j e w e i l i g e n S p a l t e o d e r n u l l b e i f a l s c h e r Eingabe 5 / 6 p u b l i c s t a t i c i n t [ ] getspaltenmaximum ( i n t m a t r i x [ ] [ ] ) { Name des Autors Allgemeine Beschreibung, was die Klasse tut 6 / 36

Anwendung von Kommentaren Beispielklasse MatrixMax mit Kommentaren (2. Hälfte) 6 p u b l i c s t a t i c i n t [ ] getspaltenmaximum ( i n t m a t r i x [ ] [ ] ) { 7 // Teste d i e Eingabe 8 i f ( m a t r i x. l e n g t h!= 3) r e t u r n n u l l ; 9 i f ( m a t r i x [ 0 ]. l e n g t h!= 4) r e t u r n n u l l ; 0 1 //Rü c k g a b e w e r t i n i t i a l i s i e r e n 2 i n t maximum [ ] = new i n t [ 4 ] ; 3 4 f o r ( i n t j = 0 ; j < 4 ; j ++) { 5 i n t maxtemp = 0 ; 6 f o r ( i n t i = 0 ; i < 3 ; i ++) { 7 i f ( maxtemp < m a t r i x [ i ] [ j ] ) { 8 // Neuer Kandidat i s t g r ö ß e r e r s e t z e a l t e s Maximum 9 maxtemp = m a t r i x [ i ] [ j ] ; 0 } 1 } 2 maximum [ j ] = maxtemp ; //Übernehme tempor ä r e s Maximum a l s E r g e b n i s 3 } 4 r e t u r n maximum ; An Stellen, an denen etwas passiert 7 / 36

Inhaltsverzeichnis 1 Schön programmieren Kommentare Lesbarkeit von Code 2 Mit Plan programmieren Von der Aufgabenstellung zum Code Testen 3 Der Datentyp char 4 Die Java API Math String Collections 8 / 36

Lesbarkeit: Formatierung Benutzt Leerzeilen! Lasst Platz! Rückt ein! Faustregel: Innerhalb geschweifter Klammern einmal einrücken (z.b. in Methoden, Klassen, Bedingungen, Schleifen...) Man sieht besser, wo die Schleife anfängt und wo sie aufhört Formatierung dient nur der Lesbarkeit für euch und andere Der Compiler optimiert Kommentare, Leerzeilen usw. einfach weg Euer Programm wird dadurch nicht langsamer! 9 / 36

Lesbarkeit: Einfachheit Nachvollziehbarkeit vor Eleganz! Ausgabe mit Fragezeichenoperator System. out. p r i n t l n ( ( i ==4)? i i s t 4 : i i s t n i c h t 4 ) ; Fragezeichenoperator: bedingung? aktion-wenn-wahr : aktion-wenn-falsch Ausgabe mit if-then-else i f ( i == 4) { System. out. p r i n t l n ( i i s t 4 ) ; } e l s e { System. out. p r i n t l n ( i i s t n i c h t 4 ) ; } Beide Codebeispiele machen genau das Gleiche! Das obere ist nur schwerer zu lesen. 10 / 36

Lesbarkeit: Sprechende Variablennamen Halber Satz als Klassen- oder Variablenname? - CamelCase macht s möglich! Gut Fehler ArrayIndexOutOfBoundsException Methode ischarinword Variable isinword Index eines Arrays außerhalb der Grenzen Ist das Zeichen im Wort enthalten? Impliziert Ja/Nein-Frage boolean Schlecht Methode convert Konvertiere was zu was? Variable foo Könnte alles Mögliche sein... 11 / 36

Lesbarkeit: Dokumentation Dokumentation: Handbuch zum Code Hilft anderen, aber auch dir selbst. 1 Read The Fucking Manual - Lies das verdammte Handbuch! (... und schreib ein verdammtes Handbuch!) http://www.flickr.com/photos/e-coli/419976117/ 12 / 36 1

Inhaltsverzeichnis 1 Schön programmieren Kommentare Lesbarkeit von Code 2 Mit Plan programmieren Von der Aufgabenstellung zum Code Testen 3 Der Datentyp char 4 Die Java API Math String Collections 13 / 36

Aufgabenstellung Aufgabe: Implementiere das Spiel Hangman. Schritt 1: Aufgabe verstehen Wie sind die Spielregeln von Hangman? Buchstaben eines Wortes raten Richtige werden eingetragen, falsche füllen zum Galgen Lösen = Das ganze Wort erraten Was genau soll das Programm können? Zufällig ein Wort auswählen Auf Eingaben der Benutzerin/des Benutzers reagieren Einen Galgen ausgeben Wie soll die Ausgabe aussehen? Nur Anzahl der Striche? ASCII-Art auf der Kommandozeile? Grafisch? Im Zweifelsfall nachfragen! 14 / 36

Ablauf aufschreiben Schritt 2: Ablauf des Programms aufschreiben Ordnet den Ablauf Definiert Teilbereiche Teile-und-Herrsche-Prinzip Nützlich für Gruppenarbeiten z.b. Ein- und Ausgabe, Wörterbearbeitung Am besten grafisch Mit Stift und Papier Am Rechner (Flowchart) 2 2 http://www.flickr.com/photos/stevegarfield/616793140 15 / 36

Ablauf aufschreiben Programmstart Neue Runde?

Ablauf aufschreiben Programmstart Neues Wort aussuchen Ja Neue Runde? Nein Programm beenden

Ablauf aufschreiben Programmstart Neues Wort aussuchen Spielstand ausgeben Neue Runde? Ja Raten (Buchstabe eingeben) Nein Programm beenden

Ablauf aufschreiben Programmstart Neues Wort aussuchen Spielstand ausgeben Neue Runde? Ja Enthalten? Raten (Buchstabe eingeben) Nein Programm beenden Ja Einsetzen

Ablauf aufschreiben Programmstart Neues Wort aussuchen Spielstand ausgeben Neue Runde? Ja Enthalten? Nein Raten (Buchstabe eingeben) Nein Programm beenden Ja Einsetzen Galgenmännchen wächst

Ablauf aufschreiben Programmstart Neues Wort aussuchen Spielstand ausgeben Neue Runde? Ja Enthalten? Nein Raten (Buchstabe eingeben) Nein Programm beenden Ja Einsetzen Galgenmännchen wächst Runde zu Ende?

Ablauf aufschreiben Programmstart Neues Wort aussuchen Spielstand ausgeben Neue Runde? Ja Enthalten? Nein Raten (Buchstabe eingeben) Nein Programm beenden Ja Ja Einsetzen Galgenmännchen wächst Runde zu Ende? Nein 16 / 36

Umsetzung in Methoden Schritt 3: Struktur in Java umsetzen Erst jetzt fangen wir an, Java-Code zu schreiben! Neue Klasse erstellen Überlegen, welche Methoden es geben wird Jeder Block aus dem Diagramm wird zu einer Methode Sinnvolle Namen geben! Kann man die Methode noch einmal sinnvoll teilen? Was für Parameter und Rückgabewerte hat die Methode? (Muss noch nicht zwingend komplett sein und stimmen) main-methode: Ablauf als Kommentare Von dort aus werden später die Methoden aufgerufen 17 / 36

Umsetzung in Methoden Methoden für Hangman (Blöcke aus dem Ablaufdiagramm) b o o l e a n wantnewgame ( ) {} S t r i n g choosenewword ( ) {} c h a r e n t e r C h a r a c t e r ( ) {} b o o l e a n ischarinword ( c h a r c h a r a c t e r, S t r i n g secretword ) {} S t r i n g i n s e r t C h a r I n W o r d ( c h a r c h a r a c t e r, S t r i n g secretword, S t r i n g currentword ) {} v o i d displaygame ( ) {} b o o l e a n isgameover ( ) {} Führt zu Compilerfehler: missing return statement Wir hätten aber gern etwas, das kompiliert Wir machen Dummymethoden draus! 18 / 36

Dummymethoden Dummymethoden 8 b o o l e a n wantnewgame ( ) { 9 // TODO: Abfrage, ob neues S p i e l gewü n s c h t w i r d 0 r e t u r n t r u e ; 1 } 2 3 S t r i n g choosenewword ( ) { 4 // TODO: Neues Wort zum Raten ausdenken 5 r e t u r n J a v a k u r s ; 6 } 7 8 c h a r e n t e r C h a r a c t e r ( ) { 9 // TODO: Eingabe e i n e s g e r a t e n e n Buchstabens 0 r e t u r n a ; 1 } Methoden geben erst mal irgend etwas zurück Inhaltlich noch nicht richtig, aber zumindest formal Code kompiliert TODO-Anzeige für einen selbst, dass noch etwas getan werden muss 19 / 36

Ablauf Grober Ablauf in main-methode 1 p u b l i c c l a s s HangmanStubs { 2 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { 3 // Programmstart 4 // Neue Runde? 5 // Wenn ja, dann suche neues Wort aus 6 // Wenn nein, dann Ende 7 // Neues Wort a u s s u c h e n 8 // S p i e l s t a n d ausgeben 9 // Buchstaben e i n g e b e n l a s s e n 0 // I s t Buchstabe im Wort e n t h a l t e n? 1 // Wenn ja, e i n s e t z e n 2 // Wenn nein, Galgen hochz ä h l e n 3 // I s t d i e Runde zu Ende? ( Gewonnen o d e r v e r l o r e n ) 4 // Wenn ja, f r a g e nach n e u e r Runde 5 // Wenn nein, gehe z u r ü ck z u r S p i e l s t a n d a u s g a b e 6 } 20 / 36

Methoden implementieren Schritt 4: Struktur mit Inhalt füllen Möglichkeit 1: Top-Down-Verfahren bei main-methode anfangen dann zu den Methoden die von main aufgerufen werden, dann zu denen, die davon aufgerufen werden usw Möglichkeit 2: Bottom-Up-Verfahren Mit einzelnen Methoden anfangen, die man für sich testen kann Methoden mit Ausgabefunktion, wo man sofort was sieht Auf jeden Fall: Kommentare beachten! (Tut mein Code schon das, was im Ablaufplan und in den Kommentaren steht?) Auf jeden Fall: Fertige Methoden testen 21 / 36

Inhaltsverzeichnis 1 Schön programmieren Kommentare Lesbarkeit von Code 2 Mit Plan programmieren Von der Aufgabenstellung zum Code Testen 3 Der Datentyp char 4 Die Java API Math String Collections 22 / 36

Testen: println-debugging Debugging (deutsch oft: Debuggen) Finden und Beseitigen der Fehler (Bugs), die ein Programm noch enthält, oft durch schrittweises Durchgehen und Nachvollziehen Debuggen mit System.out.println: Möglichst überall Werte und Zwischenergebnisse ausgeben Methode ischarinword fertig programmiert b o o l e a n ischarinword ( c h a r c h a r a c t e r, S t r i n g secretword ) { System. out. p r i n t l n ( Suche + c h a r a c t e r + i n + secretword ) ; b o o l e a n i s I n W o r d = f a l s e ; f o r ( i n t i = 0 ; i < secretword. l e n g t h ( ) ; i ++) { i f ( secretword. charat ( i ) == c h a r a c t e r ) { System. out. p r i n t l n ( Gefunden an S t e l l e + i ) ; i s I n W o r d = t r u e ; } } System. out. p r i n t l n ( I s t Buchstabe e n t h a l t e n : + i s I n W o r d ) ; r e t u r n i s I n W o r d ; } 23 / 36

Testen: Vorgehen So früh wie möglich, So oft wie möglich, So gründlich wie möglich. Warum? Wenn man erst alles schreibt und dann am Schluss testet, ist es schwerer, in 300 Zeilen Code den Fehler zu finden. Wie? Methode mit unterschiedlichen Parametern aufrufen Gültige/zu erwartende Parameter Ungültige/unsinnige Parameter Randfälle (0, viel zu hohe Zahl, leerer String...) Zwischen- und Endergebnisse ausgeben mit System.out.println 24 / 36

Testen: Vorgehen Beispiele für Testaufrufe / Gü l t i g e Parameter / ischarinword ( a, J a v a k u r s ) ; // S o l l t e t r u e z u r ü ckgeben ischarinword ( b, J a v a k u r s ) ; // S o l l t e f a l s e z u r ü ckgeben ischarinword ( =, Testwort ) ; // S o l l t e f a l s e z u r ü ckgeben / F e h l e r f ä l l e U m f a n g r e i c h e r e F e h l e r b e h a n d l u n g mö g l i c h, a b e r M i t t e l d a f ü r s i n d n i c h t B e s t a n d t e i l des J a v a k u r s / ischarinword ( a, ) ; // S o l l t e f a l s e z u r ü ckgeben ischarinword (, Testwort ) ; // S o l l t e f a l s e z u r ü ckgeben Alle Aufrufe und Ergebnisse werden mittels System.out.println ausgegeben Prüfen, ob das erwartete Ergebnis auftritt 25 / 36

Ausblick: JUnit Immer wieder testen ist anstrengend... Gibt es da keine Hilfsmittel? JUnit i m p o r t org. j u n i t. ; Beispiele für JUnit p u b l i c c l a s s TestFoobar { @Before p u b l i c v o i d setup ( ) throws E x c e p t i o n { // V o r b e r e i t u n g h i e r } } @Test p u b l i c v o i d t e s t S o m e t h i n g E l s e ( ) { a s s e r t T r u e ( a i s t e n t h a l t e n!, ischarinword ( a, J a v a k u r s ) ) ; } 26 / 36

Inhaltsverzeichnis 1 Schön programmieren Kommentare Lesbarkeit von Code 2 Mit Plan programmieren Von der Aufgabenstellung zum Code Testen 3 Der Datentyp char 4 Die Java API Math String Collections 27 / 36

Einschub: Der Datentyp char char name = zeichen ; Einzelnes Zeichen, kein Zeichenkette (Das wäre ein String) Nicht unbedingt Buchstabe, auch Ziffer, Leerzeichen... Steht in einfachen Hochkommata, nicht doppelten Man kann damit vergleichen und sogar rechnen Großbuchstaben und Kleinbuchstaben sind unterschiedlich Beispiel für char-variable c h a r z e i c h e n = j ; System. out. p r i n t l n ( E i n g e g e b e n e s Z e i c h e n : + z e i c h e n ) ; b o o l e a n j G l e i c h J = ( z e i c h e n == J ) ; // i s t f a l s e z e i c h e n ++; // z e i c h e n i s t j e t z t k 28 / 36

Die Java API API - Application Programming Interface Klassen, Funktionen, Variablen und Datenstrukturen, die zur Verfügung gestellt werden und für eigene Programme benutzt werden können Java API Mit Java API meinen wir hier die offizielle Standardbibliothek von Klassen und Methoden, die uns Java zur Verfügung stellt, beziehungsweise deren Dokumentation. Wenn ihr MPGI1 gehört habt, kennt ihr die Bibliotheca Opalica. Die Java API ist sowas ähnliches, nur viel größer und verwirrender. 29 / 36

Java API finden 30 / 36

Etwas in der Java API finden Im Browser Strg+F, dann z.b. nach Klasse Math suchen 31 / 36

Die Klasse Math Benutzen der Klasse Math 1 p u b l i c c l a s s MathExample { 2 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { 3 // Ausgabe a l l e r n u t z b a r e n char Z e i c h e n ( c h a r =16 b i t ) 4 f o r ( i n t i = 0 ; i < Math. pow ( 2, 1 6 ) ; i ++) { 5 System. out. p r i n t l n ( i + + ( c h a r ) i ) ; 6 } 7 // Wurzel von 4 und C o s i n u s von 2 PI b e r e c h n e n & ausgeben 8 d o u b l e c = Math. s q r t ( 4 ) ; 9 d o u b l e d = Math. c o s (2 Math. PI ) ; 0 System. out. p r i n t l n ( Wurzel : + c +, K o s i n u s : + d ) ; 1 } 2 } Math enthält Variablen: π = Math.PI und e = Math.E und Methoden: z.b. sqrt, pow, abs, cos oder max Fast alles ist static deklariert: Aufruf mit Math.name Normalerweise sehr effizient/genau implementiert 32 / 36

Die Klasse String Warum ist das eine Klasse? - Per Namenskonvention sind alle groß geschriebenen Variablentypen Klassen. - für alle primitiven Datentypen (int,...) gibt es auch Wrapper-Klassen (Integer,...) Wichtig: Strings sind konstant! Konkatenation ist teuer StringBuilder verwenden Nützliche Methoden, z.b. Vergleich, Teilstring liefern, verketten Beispiel: charat gibt den Buchstaben an einer bestimmten Position aus S t r i n g wort = J a v a k u r s ; System. out. p r i n t l n ( 3 t e r Buchstabe ( I n d e x 2) : + wort. charat ( 2 ) ) ; Beispiel: split trennt einen String nach gegeben Muster (regex) auf S t r i n g s t r i n g = 04 12 1989 ; S t r i n g [ ] p a r t s = s t r i n g. s p l i t ( ) ; // Trennung am Minus S t r i n g p a r t 1 = p a r t s [ 0 ] ; // 04 S t r i n g p a r t 2 = p a r t s [ 1 ] ; // 12 S t r i n g p a r t 3 = p a r t s [ 2 ] ; // 1989 33 / 36

Collections Bereits aus MPGI 1 bekannt: Stack, Schlange, Baum In Java kennt ihr bisher: Array Es gibt aber viel mehr Datenstrukturen! Die Java-API stellt sehr viele Datenstrukturen zur Verfügung Die wichtigsten: ArrayList - Array ohne feste Größe ArrayDeque - Stack / Schlange LinkedList - verkettete Liste, meist langsamer später wichtig: HashMap, PriorityQueue, ArrayBlockingQueue... Es gibt aber auch Methoden für die Datenstrukturen: sort(), binarysearch(), max(), reverse,... i n t [ ] a = { 5, 7, 1, 2, 1 } ; A r r a y s. s o r t ( a ) ; // [ 1, 1, 2, 5, 7 ] Beispiel: Verwendung von sort 34 / 36

Zusammenfassung Datentyp char: char name = a ; (genau ein Zeichen) Lesbarer Code durch: Inline- und Blockkommentare Leerzeichen, Leerzeilen, Einrückung Einfachen statt eleganten Code Sprechende Variablennamen Lies Dokumentation, schreib Dokumentation Bearbeiten einer komplexen Aufgabe 1 Aufgabe verstehen 2 Ablauf aufschreiben 3 Struktur in Java umsetzen 4 Struktur mit Inhalt füllen Testen durch Debugging mit System.out.println Java API mit nützlichen Klassen (Math, String...) 1 Math 2 String 3 Collections Jetzt: Feedback abgeben! 35 / 36

Bonus: Externe Bibliotheken - JGraphT Neben der Java-API gibt es viele weitere (freie) Bibliotheken Für MPGI2 ist besonders JGraphT interessant: Enthält alle wichtigen Graphentypen (gewichtet, gerichtet,..) In Kombination mit JGraph ist eine schnelle Visualisierung möglich Alle besprochenen Algorithmen sind bereits implementiert gut zum Vergleichen der Hausaufgaben für nach MPGI sicher zu empfehlen Wie ruf ich externe Bibliotheken auf? Wie benutz ich JGraphT? 36 / 36