Arrays und Schleifen

Ähnliche Dokumente
Arrays und Schleifen

Tag 4 Repetitorium Informatik (Java)

Tag 4 Repetitorium Informatik (Java)

Zeiger. C-Kurs 2012, 2. Vorlesung. Tino Kutschbach 10.

Einstieg in die Informatik mit Java

Grundlagen der Programmierung Teil1 Einheit III Okt. 2010

Java - Schleifen. Bedingung. wiederhole. Anweisung Anweisung Anweisung. Leibniz Universität IT Services Anja Aue

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Schleifen: Immer wieder dasselbe tun

1 Organisatorisches. 2 Compilezeit- und Laufzeitfehler. 3 Exceptions. 4 Try-Catch-Finally

Modellierung und Programmierung 1

Tag 3 Repetitorium Informatik (Java)

Schleifen in C/C++/Java

Exceptions. CoMa-Übung VII TU Berlin. CoMa-Übung VII (TU Berlin) Exceptions / 1

Vorkurs Informatik WiSe 16/17

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 2

C++ - Einführung in die Programmiersprache Schleifen

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

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

Schachtelung der 2. Variante (Bedingungs-Kaskade): if (B1) A1 else if (B2) A2 else if (B3) A3 else if (B4) A4 else A

Programmieren I. Arrays Heusch 7.2 Ratz Institut für Angewandte Informatik

Programmieren I. Arrays Heusch 7.2 Ratz Institut für Angewandte Informatik

Programmierkurs Java

C++ Teil Schleifen. Man kann bestimme Anweisungen in einem Programm mehrfach ausführen lassen. Dazu gibt es in C++ verschiedene Schleifen.

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

3. Grundanweisungen in Java

Arrays. Einleitung. Deklarieren einer Array Variablen

1. Referenzdatentypen: Felder und Strings. Referenz- vs. einfache Datentypen. Rückblick: Einfache Datentypen (1) 4711 r

1. Referenzdatentypen: Felder und Strings

Ausgabe:

Grundlagen von C# - 2

Schleifen in C/C++/Java

Zentralübung Grundlagen der Programmierung

Übungsblatt 2. Java Vorkurs (WS 2017)

Einstieg in die Informatik mit Java

Algorithmen implementieren. Implementieren von Algorithmen

Reihungen. Martin Wirsing. in Zusammenarbeit mit Matthias Hölzl und Nora Koch 11/03

Algorithmen und ihre Programmierung -Teil 2-

3. Anweisungen und Kontrollstrukturen

+ C - Array (Vektoren, Felder)

Propädeutikum zur Programmierung

Kapitel 3: Variablen

Anweisungen zur Ablaufsteuerung

Übungspaket 23 Mehrdimensionale Arrays

Einführung in die Programmierung für Computerlinguisten

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Referenzen. Referenzen

Tag 3 Repetitorium Informatik (Java)

Einführung in die Programmierung für NF MI. Übung 04

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

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

Variablen. int Flugzeug. float. I write code Hund. String. long. Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel

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

3.2 Datentypen und Methoden

Klassen als Datenstrukturen

Felder. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

Übungspaket 23 Mehrdimensionale Arrays

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

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

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

II. Grundlagen der Programmierung. Beispiel: Merge Sort. Beispiel: Merge Sort (Forts. ) Beispiel: Merge Sort (Forts. )

Eine kleine Befehlssammlung für Java Teil1

2 Teil 2: Nassi-Schneiderman

Aufgabe 1.90: Ein Geschäft gibt ihren Kunden unterschiedliche Rabatte. Schreiben ein Programm, das folgende Rabattklassen vorsieht:

05 For-Schleifen. For-Schleifen 1/7 Was ist eine Schleife?

Intensivübung zu Algorithmen und Datenstrukturen

Felder - Arrays. Typ feldname[] = new Typ[<ganze Zahl >]; Beispiel: double vektor[] = new double[5]; auch eine Initialisierung ist möglich.

C++ - Objektorientierte Programmierung Konstante und statische Elemente

C# - Einführung in die Programmiersprache Arrays, Enumeration und Collections. Leibniz Universität IT Services Anja Aue

Einstieg in die Informatik mit Java

Wie entwerfe ich ein Programm?

Dr. Monika Meiler. Inhalt

Einstieg in die Informatik mit Java

Übungsblatt 2. Java Vorkurs (WS 2015)

Schwerpunkte. 10. Felder (Arrays) Grundprinzip von Arrays. Klassifikation von Typen in Programmiersprachen

Kontrollstrukturen Blöcke / Schleifen / Bedingungen

1.8.5 Wiederholungen. Beispiele Unendliche Schleife: 1.8 Kontrollstrukturen 75. ( Bedingung ) AnweisungOderBlock. ja Anweisung. Bedingung erfüllt?

Einstieg in die Informatik mit Java

Vorlesung Programmieren

Praktikum zur Vorlesung Einführung in die Programmierung WS 14/15 Blatt 3

Arbeitsblätter für Algorithmierung und Strukturierung C #

Arbeitsblätter für die Lehrveranstaltung OOP JAVA 1

Java: Eine kurze Einführung an Beispielen

Wertebereich und Genauigkeit der Zahlendarstellung

WiMa-Praktikum 1. Woche 8

Transkript:

Arrays und Schleifen Javakurs 2013, 2. Vorlesung Theresa Enghardt basierend auf der Vorlage von Mario Bodemann und Sebastian Dyroff wiki.freitagsrunde.org 4. März 2013 This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 License. 1 / 43

Inhaltsverzeichnis 1 Arrays Was ist ein Array? Array-Bauanleitung Mehrdimensionale Arrays Fehlerquellen 2 Schleifen Warum Schleifen? Die while-schleife Die for-schleife Fehlerquellen 2 / 43

Was ist ein Array? Beispiel: Zug mit mehreren Wagons Variable, die speichert, wie viele Leute in den Wagons sitzen 3 / 43

Was ist ein Array? Beispiel: Zug mit mehreren Wagons Variable, die speichert, wie viele Leute in den Wagons sitzen Es geht besser als int zug0 = 2; int zug1 = 4; int zug2 = 2; 3 / 43

Was ist ein Array? Beispiel: Zug mit mehreren Wagons Variable, die speichert, wie viele Leute in den Wagons sitzen Es geht besser als int zug0 = 2; int zug1 = 4; int zug2 = 2; Array von int: Variable, die aus mehreren Zahlen besteht, die automatisch durchnummeriert werden Achtung: Java beginnt bei der Nummerierung bei 0! 3 / 43

Inhaltsverzeichnis 1 Arrays Was ist ein Array? Array-Bauanleitung Mehrdimensionale Arrays Fehlerquellen 2 Schleifen Warum Schleifen? Die while-schleife Die for-schleife Fehlerquellen 4 / 43

Array-Bauanleitung Arraysymbol Typ int [] zug = new i n t [ 3 ] ; Ein neues Array erstellen Variablenname Länge 5 / 43

Array-Bauanleitung Arraysymbol Typ int [] zug = new i n t [ 3 ] ; Ein neues Array erstellen Variablenname Länge Mit Werten füllen zug [ 0 ] = 2 ; zug [ 1 ] = 4 ; zug [ 2 ] = 1 ; Index 5 / 43

Array-Bauanleitung Arrays mit anderen Datentypen b o o l e an [ ] i s t W a g e n v o l l = new b o o lean [ 3 ] ; i s t W a g e n v o l l [ 0 ] = f a l s e ; i s t W a g e n v o l l [ 1 ] = t r u e ; i s t W a g e n v o l l [ 2 ] = f a l s e ; double wagentemperatur [ ] = new double [ 3 ] ; wagentemperatur [ 0 ] = 1 9. 5 ; wagentemperatur [ 1 ] = 2 0. 2 ; wagentemperatur [ 2 ] = 2 1. 0 ; Datentyp kann durch jeden beliebigen ersetzt werden Werte müssen dann natürlich dazu passen Klammern (Arraysymbol) können überall stehen 6 / 43

Array-Bauanleitung i n t zug2 [ ] = new i n t [ 6 ] ; zug2 [ 0 ] = 5 ; zug2 [ 1 ] = 2 3 ; zug2 [ 2 ] = 9 ; zug2 [ 3 ] = 0 ; zug2 [ 4 ] = 4 2 ; zug2 [ 5 ] = 7 ; Array mit anderer Länge i n t zuglaenge = zug. l e n g t h ; // 3 i n t zug2laenge = zug2. l e n g t h ; // 6 Längere Arrays mit mehr Werten müssen so angelegt werden Sonst tritt Fehler auf (dazu später mehr) Array merkt sich, wie lang es ist Länge kann mit arrayname.length abgerufen werden 7 / 43

Array-Bauanleitung Alles in einer Zeile S t r i n g [ ] p l a n e t e n = { Merkur, Venus, Erde, Mars } ; Aufzählung der Werte in geschweiften Klammern Länge des Arrays ist damit 4, wird automatisch erkannt 8 / 43

Array-Bauanleitung Deklaration, Initialisierung und Definition in drei Zeilen S t r i n g mehrplaneten [ ] ; // D e k l a r a t i o n mehrplaneten = new S t r i n g [ 4 ] ; // I n i t i a l i s i e r u n g mehrplaneten [ 0 ] = J u p i t e r ; // D e f i n i t i o n Deklaration = Diese Variable existiert. (Inhalt noch unbekannt) Initialisierung = Die Variable hat diese Länge. (Wichtig für Speicherverwaltung) Definition = Die Variable hat diesen Inhalt. 9 / 43

Inhaltsverzeichnis 1 Arrays Was ist ein Array? Array-Bauanleitung Mehrdimensionale Arrays Fehlerquellen 2 Schleifen Warum Schleifen? Die while-schleife Die for-schleife Fehlerquellen 10 / 43

Mehrdimensionale Arrays Wie würde man eine Matrix realisieren? 0 1 2 3 0 46 795 13 468 1 965 648 5 60 2 67 464 84 541 Ansatz: Ein Array, in dem Arrays enthalten sind... 11 / 43

Mehrdimensionale Arrays Erzeugen einer Matrix i n t m a t r i x [ ] [ ] = new i n t [ 3 ] [ 4 ] ; Mehrere Arrayklammern hintereinander Mehrere Dimensionen Hier: 3 Zeilen, 4 Spalten Jeder Wert hat nun 2 Indizes anstatt einem Zuweisung der Werte m a t r i x [ 0 ] [ 0 ] = 4 6 ; m a t r i x [ 0 ] [ 1 ] = 795; m a t r i x [ 0 ] [ 2 ] = 1 3 ; m a t r i x [ 0 ] [ 3 ] = 468; 0 1 2 3 0 46 795 13 468 1 965 648 5 60 2 67 464 84 541 m a t r i x [ 1 ] [ 0 ] = 965; m a t r i x [ 1 ] [ 1 ] = 648;... 12 / 43

Mehrdimensionale Arrays Erzeugen einer Matrix: zeilenweise i n t m a t r i x [ ] [ ] = new i n t [ 3 ] [ 4 ] ; i n t z e i l e 0 [ ] = { 46, 795, 13, 468 } ; i n t z e i l e 1 [ ] = { 965, 648, 5, 60 } ; i n t z e i l e 2 [ ] = { 67, 464, 84, 541 } ; m a t r i x [ 0 ] = z e i l e 0 ; m a t r i x [ 1 ] = z e i l e 1 ; m a t r i x [ 2 ] = z e i l e 2 ; Zuerst: Leere Matrix mit 3 Zeilen und 4 Spalten Dann: Neues Hilfsarray zeile0 der Länge 4 Weitere Arrays zeile1 und zeile2 analog dazu Schließlich: Zuweisen als 0., 1. und 2. Zeile der Matrix 13 / 43

Mehrdimensionale Arrays Erzeugen einer Matrix mit nur einer Zuweisung i n t m a t r i x [ ] [ ] = {{ 46, 795, 13, 468 }, { 965, 648, 5, 60 }, { 67, 464, 84, 541 } } ; Variante mit der wenigsten Schreibarbeit Das kann alles auf eine Zeile (Umbrüche nur der Lesbarkeit halber) Dimensionen (3 Zeilen, 4 Spalten) implizit gegeben, d.h. automatisch erkannt Zuweisung sieht ursprünglicher Matrix sehr ähnlich 14 / 43

Inhaltsverzeichnis 1 Arrays Was ist ein Array? Array-Bauanleitung Mehrdimensionale Arrays Fehlerquellen 2 Schleifen Warum Schleifen? Die while-schleife Die for-schleife Fehlerquellen 15 / 43

Fehler I Wo liegt der Fehler? 1 p u b l i c c l a s s A r r a y F e h l e r 1 { 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 4 i n t [ ] zug ; 5 zug [ 0 ] = 2 ; 6 zug [ 1 ] = 4 ; 7 zug [ 2 ] = 1 ; 8 } 9 } 16 / 43

Fehler I Wo liegt der Fehler? 1 p u b l i c c l a s s A r r a y F e h l e r 1 { 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 4 i n t [ ] zug ; 5 zug [ 0 ] = 2 ; 6 zug [ 1 ] = 4 ; 7 zug [ 2 ] = 1 ; 8 } 9 } Compilerfehler $ javac ArrayFehler1.java ArrayFehler1.java:5: variable zug might not have been initialized zug[0] = 2; ^ 1 error 16 / 43

Lösung I: Array initialisieren Fehler behoben 1 p u b l i c c l a s s A r r a y F e h l e r 1 { 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 4 i n t [ ] zug = new int[3] ; 5 zug [ 0 ] = 2 ; 6 zug [ 1 ] = 4 ; 7 zug [ 2 ] = 1 ; 8 } 9 } Nicht vergessen, das Array zu initialisieren! 17 / 43

Fehler II Wo liegt der Fehler? 1 p u b l i c c l a s s A r r a y F e h l e r 2 { 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 4 i n t [ ] zug = new i n t [ 3 ] ; 5 zug [ 1 ] = 4 ; 6 zug [ 2 ] = 1 ; 7 zug [ 3 ] = 5 ; 8 } 9 } 18 / 43

Fehler II Wo liegt der Fehler? 1 p u b l i c c l a s s A r r a y F e h l e r 2 { 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 4 i n t [ ] zug = new i n t [ 3 ] ; 5 zug [ 1 ] = 4 ; 6 zug [ 2 ] = 1 ; 7 zug [ 3 ] = 5 ; 8 } 9 } Kein Compilerfehler $ javac ArrayFehler2.java $ 18 / 43

Fehler II Wo liegt der Fehler? 1 p u b l i c c l a s s A r r a y F e h l e r 2 { 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 4 i n t [ ] zug = new i n t [ 3 ] ; 5 zug [ 1 ] = 4 ; 6 zug [ 2 ] = 1 ; 7 zug [ 3 ] = 5 ; 8 } 9 } Kein Compilerfehler $ javac ArrayFehler2.java $ Aber: Laufzeitfehler beim Ausführen $ java ArrayFehler2 Exception in thread "main" java.lang.arrayindexoutofboundsexception: 3 at ArrayFehler2.main(ArrayFehler2.java:7) $ 18 / 43

Lösung II: Richtige Indizes benutzen Indizes waren falsch 1 p u b l i c c l a s s A r r a y F e h l e r 2 { 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 4 i n t [ ] zug = new i n t [ 3 ] ; 5 zug [ 0 ] = 4 ; 6 zug [ 1 ] = 1 ; 7 zug [ 2 ] = 5 ; 8 } 9 } Denkt dran: Zählung beginnt bei 0! 19 / 43

Tipp zu Lösung II: Auf Arraygrenze testen i n t i n d e x = 3 ; i f ( i n d e x < zug. l e n g t h ) { zug [ i n d e x ] = 5 ; } Fehler kann nicht mehr auftreten Anzahl der Elemente: arrayname.length Zählung beginnt bei 0 Index muss immer kleiner als Länge sein Bei der Zuweisung testen, ob wir innerhalb der Arraygrenzen sind Keine ArrayIndexOutOfBoundsException mehr. 20 / 43

Zusammenfassung: Arrays Array = Reihe von Werten mit gemeinsamem Namen + Index Deklaration: typ name []; Initialisierung: name = new typ [länge ]; Definition: name [index ] = wert ; Zugriff: name [index ] Deklaration und Definition auch in einer Zeile möglich: typ name [] = { wert, wert, wert,... }; Länge eines Arrays: name.length Aufpassen: Java fängt bei 0 an zu zählen! 21 / 43

Inhaltsverzeichnis 1 Arrays Was ist ein Array? Array-Bauanleitung Mehrdimensionale Arrays Fehlerquellen 2 Schleifen Warum Schleifen? Die while-schleife Die for-schleife Fehlerquellen 22 / 43

Der Anfang einer Schleife 1 1 http://www.flickr.com/photos/tekkebln/7157455873/ 23 / 43

Der Anfang einer Schleife Aufgabe: Schreibe ein Javaprogramm, das 5,4,3,2,1 auf der Konsole ausgibt. $ java Countdown5 5 4 3 2 1 Los! $ Countdown von 5 abwärts... 24 / 43

Der Anfang einer Schleife Der triviale Ansatz 1 p u b l i c c l a s s Countdown5 { 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 4 System. out. p r i n t l n ( 5 ) ; 5 System. out. p r i n t l n ( 4 ) ; 6 System. out. p r i n t l n ( 3 ) ; 7 System. out. p r i n t l n ( 2 ) ; 8 System. out. p r i n t l n ( 1 ) ; 9 System. out. p r i n t l n ( Los! ) ; 0 1 } 2 } 25 / 43

Der Anfang einer Schleife Aufgabe: Nun schreibe einen Countdown von 1000 abwärts zu 0. Sehr schmerzhaft... 1 p u b l i c c l a s s Countdown1000 { 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 4 System. out. p r i n t l n ( 1000 ) ; 5 System. out. p r i n t l n ( 999 ) ; 6 System. out. p r i n t l n ( 998 ) ; 7 System. out. p r i n t l n ( 997 ) ; 8 System. out. p r i n t l n ( 996 ) ; 9 System. out. p r i n t l n ( 995 ) ; 10 System. out. p r i n t l n ( 994 ) ; 11 System. out. p r i n t l n ( 993 ) ; 12 System. out. p r i n t l n ( 992 ) ; Unnötige Schreibarbeit Copy & Paste Sehr fehleranfällig...... Das muss doch besser gehen! 26 / 43

Inhaltsverzeichnis 1 Arrays Was ist ein Array? Array-Bauanleitung Mehrdimensionale Arrays Fehlerquellen 2 Schleifen Warum Schleifen? Die while-schleife Die for-schleife Fehlerquellen 27 / 43

Die while-schleife: Countdown Countdown mit einer Variable 1 p u b l i c c l a s s Countdown { 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 4 i n t c o u n t e r = 1 0 0 0 ; 5 6 7 System. out. p r i n t l n ( c o u n t e r ) ; 8 c o u n t e r = c o u n t e r 1 ; 9 0 1 } 2 } 28 / 43

Die while-schleife: Countdown Countdown mit einer Variable 1 p u b l i c c l a s s Countdown { 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 4 i n t c o u n t e r = 1 0 0 0 ; 5 6 while (counter > 0) { 7 System. out. p r i n t l n ( c o u n t e r ) ; 8 c o u n t e r = c o u n t e r 1 ; 9 } 0 System. out. p r i n t l n ( Los! ) ; 1 } 2 } Wiederhole Zeile 7 und 8, solange Bedingung hinter while wahr ist counter zählt bei jedem Durchlauf um 1 runter 28 / 43

Die while-schleife: Countdown Countdown mit einer Variable 1 p u b l i c c l a s s Countdown { 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 4 i n t c o u n t e r = 1 0 0 0 ; 5 6 while (counter > 0) { 7 System. out. p r i n t l n ( c o u n t e r ) ; 8 c o u n t e r = c o u n t e r 1 ; 9 } 0 System. out. p r i n t l n ( Los! ) ; 1 } 2 } Wiederhole Zeile 7 und 8, solange Bedingung hinter while wahr ist counter zählt bei jedem Durchlauf um 1 runter Wenn counter == 0 ist, ist Bedingung counter > 0 nicht mehr wahr und die Schleife ist zu Ende Letzte Ausgabe ist 1 27 / 43

Die while-schleife: Fakultät berechnen Aufgabe: Berechne die Fakultät einer Zahl! (Beispiel: 4) n! = 1 2... (n 2) (n 1) n 4! = 1 2 3 4 i n t z a e h l e r = 1 ; i n t z a h l = 4 ; w h i l e ( z a e h l e r <= z a h l ) { Hochzählen von 1 bis zur Zahl... } z a e h l e r = z a e h l e r + 1 ; 28 / 43

Die while-schleife: Fakultät berechnen Berechnen der Fakultät 1 p u b l i c c l a s s F a k u l t a e t { 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 4 i n t z a e h l e r = 1 ; 5 i n t z a h l = 4 ; 6 i n t e r g e b n i s = 1 ; //Denn schon 0! == 1 7 8 w h i l e ( z a e h l e r <= z a h l ) { 9 e r g e b n i s = e r g e b n i s z a e h l e r ; 0 z a e h l e r = z a e h l e r + 1 ; 1 } 2 System. out. p r i n t l n ( E r g e b n i s : + e r g e b n i s ) ; 3 } 4 } Erster Durchlauf: ergebnis = 1 * 1 (= 1) Zweiter Durchlauf: ergebnis = 1 * 2 (= 2) Dritter Durchlauf: ergebnis = 2 * 3 (= 6) Vierter Durchlauf: ergebnis = 6 * 4 (= 24) Schluss: Ergebnis: 24 29 / 43

Inhaltsverzeichnis 1 Arrays Was ist ein Array? Array-Bauanleitung Mehrdimensionale Arrays Fehlerquellen 2 Schleifen Warum Schleifen? Die while-schleife Die for-schleife Fehlerquellen 30 / 43

Die for-schleife Initialisierung Bedingung Herunterzählen Countdown von 1000 abwärts mit for-schleife f o r (int counter = 1000 ; counter > 0 ; counter--) { System. out. p r i n t l n ( c o u n t e r ) ; } System. out. p r i n t l n ( Los! ) ; 31 / 43

Die for-schleife Initialisierung Bedingung Herunterzählen Countdown von 1000 abwärts mit for-schleife f o r (int counter = 1000 ; counter > 0 ; counter--) { System. out. p r i n t l n ( c o u n t e r ) ; } System. out. p r i n t l n ( Los! ) ; Kopf der Schleife besteht aus 3 Komponenten: Zählvariable counter wird dort initialisiert Abbruchbedingung wird festgelegt Hoch-/Runterzählen der Laufvariable bei jedem Durchlauf Statt counter = counter - 1 kann man auch counter-- schreiben 31 / 43

Die for-schleife for-schleife 1 p u b l i c c l a s s G e d i c h t { 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 4 S t r i n g [ ] g e d i c h t = new S t r i n g [ 4 ] ; 5 6 g e d i c h t [ 0 ] = Ein Mops kam i n d i e Kueche ; 7 g e d i c h t [ 1 ] = und s t a h l dem Koch e i n E i. ; 8 g e d i c h t [ 2 ] = Da nahm d e r Koch d i e K e l l e ; 9 g e d i c h t [ 3 ] = und s c h l u g den Mops zu B r e i. ; 0 1 f o r ( i n t i = 0 ; i < g e d i c h t. l e n g t h ; i ++) { 2 System. out. p r i n t l n ( g e d i c h t [ i ] ) ; 3 } 4 } 5 } 32 / 43

for-schleife: Matrix-Beispiel Beispiel: Finde das Maximum aus jeder Spalte und speichere die Ergebnisse in einem neuen Array! matrix = 46 795 13 468 965 648 5 60 67 464 84 541 maximum = (...,...,...,... ) max temp = 0 33 / 43

for-schleife: Matrix-Beispiel Beispiel: Finde das Maximum aus jeder Spalte und speichere die Ergebnisse in einem neuen Array! matrix = 46 795 13 468 965 648 5 60 67 464 84 541 maximum = (...,...,...,... ) max temp = 46 Aktuelle Spalte: 0 Aktuelle Zeile: 0 Aktueller Wert: 46 Vergleiche mit bisherigem Maximum 0: 46 > 0 Neues temporäres Maximum gefunden: 46 34 / 43

for-schleife: Matrix-Beispiel Beispiel: Finde das Maximum aus jeder Spalte und speichere die Ergebnisse in einem neuen Array! matrix = 46 795 13 468 965 648 5 60 67 464 84 541 maximum = (...,...,...,... ) max temp = 965 Aktuelle Spalte: 0 Aktuelle Zeile: 1 Aktueller Wert: 965 Vergleiche mit bisherigem Maximum 46: 965 > 46 Neues temporäres Maximum gefunden: 965 34 / 43

for-schleife: Matrix-Beispiel Beispiel: Finde das Maximum aus jeder Spalte und speichere die Ergebnisse in einem neuen Array! matrix = 46 795 13 468 965 648 5 60 67 464 84 541 maximum = (...,...,...,... ) max temp = 965 Aktuelle Spalte: 0 Aktuelle Zeile: 2 Aktueller Wert: 67 Vergleiche mit bisherigem Maximum 965: 67 < 965 Kein neues temporäres Maximum, bleibt 965 34 / 43

for-schleife: Matrix-Beispiel Beispiel: Finde das Maximum aus jeder Spalte und speichere die Ergebnisse in einem neuen Array! matrix = 46 795 13 468 965 648 5 60 67 464 84 541 maximum = (965,...,...,... ) max temp = 0 Ende der Spalte erreicht Keine weiteren Kandidaten: Temporäres Maximum ist damit endgültig Vorbereitung für nächste Spalte: Setze temporäres Maximum wieder auf 0 34 / 43

for-schleife: Matrix-Beispiel Beispiel: Finde das Maximum aus jeder Spalte und speichere die Ergebnisse in einem neuen Array! matrix = 46 795 13 468 965 648 5 60 67 464 84 541 maximum = (965,...,...,... ) max temp = 795 Aktuelle Spalte: 1 Aktuelle Zeile: 0 Aktueller Wert: 795 Vergleiche mit bisherigem Maximum 0: 795 > 0 Neues temporäres Maximum gefunden: 795 34 / 43

for-schleife: Matrix-Beispiel Beispiel: Finde das Maximum aus jeder Spalte und speichere die Ergebnisse in einem neuen Array! matrix = 46 795 13 468 965 648 5 60 67 464 84 541 maximum = (965,...,...,... ) max temp = 795 Aktuelle Spalte: 1 Aktuelle Zeile: 1 Aktueller Wert: 648 Vergleiche mit bisherigem Maximum 795: 648 < 795 Kein neues Maximum, bleibt 795 34 / 43

for-schleife: Matrix-Beispiel Beispiel: Finde das Maximum aus jeder Spalte und speichere die Ergebnisse in einem neuen Array! matrix = 46 795 13 468 965 648 5 60 67 464 84 541 maximum = (965,...,...,... ) max temp = 795 Aktuelle Spalte: 1 Aktuelle Zeile: 2 Aktueller Wert: 464 Vergleiche mit bisherigem Maximum 795: 464 < 795 Kein neues Maximum, bleibt 795 34 / 43

for-schleife: Matrix-Beispiel Beispiel: Finde das Maximum aus jeder Spalte und speichere die Ergebnisse in einem neuen Array! matrix = 46 795 13 468 965 648 5 60 67 464 84 541 maximum = (965, 795,...,... ) max temp = 0 Ende der Spalte erreicht Keine weiteren Kandidaten: Temporäres Maximum ist damit endgültig Vorbereitung für nächste Spalte: Setze temporäres Maximum wieder auf 0 34 / 43

for-schleife: Matrix-Beispiel Beispiel: Finde das Maximum aus jeder Spalte und speichere die Ergebnisse in einem neuen Array! matrix = 46 795 13 468 965 648 5 60 67 464 84 541 maximum = (965, 795,...,... ) max temp = 13 Aktuelle Spalte: 2 Aktuelle Zeile: 0 Aktueller Wert: 13 Vergleiche mit bisherigem Maximum 0: 13 > 0 Neues temporäres Maximum gefunden: 13 34 / 43

for-schleife: Matrix-Beispiel Beispiel: Finde das Maximum aus jeder Spalte und speichere die Ergebnisse in einem neuen Array! matrix = 46 795 13 468 965 648 5 60 67 464 84 541 maximum = (965, 795,...,... ) max temp = 13 Aktuelle Spalte: 2 Aktuelle Zeile: 1 Aktueller Wert: 5 Vergleiche mit bisherigem Maximum 13: 5 < 13 Kein neues Maximum, bleibt 13 34 / 43

for-schleife: Matrix-Beispiel Beispiel: Finde das Maximum aus jeder Spalte und speichere die Ergebnisse in einem neuen Array! matrix = 46 795 13 468 965 648 5 60 67 464 84 541 maximum = (965, 795,...,... ) max temp = 84 Aktuelle Spalte: 2 Aktuelle Zeile: 2 Aktueller Wert: 84 Vergleiche mit bisherigem Maximum 13: 84 > 13 Neues temporäres Maximum gefunden: 84 34 / 43

for-schleife: Matrix-Beispiel Beispiel: Finde das Maximum aus jeder Spalte und speichere die Ergebnisse in einem neuen Array! matrix = 46 795 13 468 965 648 5 60 67 464 84 541 maximum = (965, 795, 84,... ) max temp = 0 Ende der Spalte erreicht Keine weiteren Kandidaten: Temporäres Maximum ist damit endgültig Vorbereitung für nächste Spalte: Setze temporäres Maximum wieder auf 0 34 / 43

for-schleife: Matrix-Beispiel Beispiel: Finde das Maximum aus jeder Spalte und speichere die Ergebnisse in einem neuen Array! matrix = 46 795 13 468 965 648 5 60 67 464 84 541 maximum = (965, 795, 84,... ) max temp = 468 Aktuelle Spalte: 3 Aktuelle Zeile: 0 Aktueller Wert: 468 Vergleiche mit bisherigem Maximum 0: 468 > 0 Neues temporäres Maximum gefunden: 468 34 / 43

for-schleife: Matrix-Beispiel Beispiel: Finde das Maximum aus jeder Spalte und speichere die Ergebnisse in einem neuen Array! matrix = 46 795 13 468 965 648 5 60 67 464 84 541 maximum = (965, 795, 84,... ) max temp = 468 Aktuelle Spalte: 3 Aktuelle Zeile: 1 Aktueller Wert: 60 Vergleiche mit bisherigem Maximum 468: 60 < 468 Kein neues Maximum, bleibt 468 34 / 43

for-schleife: Matrix-Beispiel Beispiel: Finde das Maximum aus jeder Spalte und speichere die Ergebnisse in einem neuen Array! matrix = 46 795 13 468 965 648 5 60 67 464 84 541 maximum = (965, 795, 84,... ) max temp = 541 Aktuelle Spalte: 3 Aktuelle Zeile: 2 Aktueller Wert: 541 Vergleiche mit bisherigem Maximum 468: 541 > 468 Neues temporäres Maximum gefunden: 541 34 / 43

for-schleife: Matrix-Beispiel Beispiel: Finde das Maximum aus jeder Spalte und speichere die Ergebnisse in einem neuen Array! matrix = 46 795 13 468 965 648 5 60 67 464 84 541 maximum = (965, 795, 84, 541) max temp = 0 Ende der Spalte erreicht Keine weiteren Kandidaten: Temporäres Maximum ist damit endgültig Ende der Matrix erreicht - Aufgabe erfüllt! Temporäres Maximum wird nicht mehr gebraucht, Wert egal 34 / 43

for-schleife: Matrix-Beispiel Implementierung des Matrixbeispiels in Java 1 p u b l i c c l a s s MatrixMax { 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 i n t m a t r i x [ ] [ ] = {{ 46, 795, 13, 468 }, 4 { 965, 648, 5, 60 }, 5 { 67, 464, 84, 541 } } ; 6 7 i n t maximum [ ] = new i n t [ 4 ] ; 8 i n t maxtemp = 0 ; 9 0 1 2 3 4 5 6 7 8 9 } 0 } 1 } 35 / 43

for-schleife: Matrix-Beispiel Implementierung des Matrixbeispiels in Java 1 p u b l i c c l a s s MatrixMax { 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 i n t m a t r i x [ ] [ ] = {{ 46, 795, 13, 468 }, 4 { 965, 648, 5, 60 }, 5 { 67, 464, 84, 541 } } ; 6 7 i n t maximum [ ] = new i n t [ 4 ] ; 8 i n t maxtemp = 0 ; 9 0 f o r ( i n t j = 0 ; j < 4 ; j ++) { 1 2 3 4 5 6 7 8 9 } 0 } 1 } 35 / 43

for-schleife: Matrix-Beispiel Implementierung des Matrixbeispiels in Java 1 p u b l i c c l a s s MatrixMax { 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 i n t m a t r i x [ ] [ ] = {{ 46, 795, 13, 468 }, 4 { 965, 648, 5, 60 }, 5 { 67, 464, 84, 541 } } ; 6 7 i n t maximum [ ] = new i n t [ 4 ] ; 8 i n t maxtemp = 0 ; 9 0 f o r ( i n t j = 0 ; j < 4 ; j ++) { 1 2 f o r ( i n t i = 0 ; i < 3 ; i ++) { 3 4 5 6 } 7 8 9 } 0 } 1 } 35 / 43

for-schleife: Matrix-Beispiel Implementierung des Matrixbeispiels in Java 1 p u b l i c c l a s s MatrixMax { 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 i n t m a t r i x [ ] [ ] = {{ 46, 795, 13, 468 }, 4 { 965, 648, 5, 60 }, 5 { 67, 464, 84, 541 } } ; 6 7 i n t maximum [ ] = new i n t [ 4 ] ; 8 i n t maxtemp = 0 ; 9 0 f o r ( i n t j = 0 ; j < 4 ; j ++) { 1 2 f o r ( i n t i = 0 ; i < 3 ; i ++) { 3 i f ( maxtemp < m a t r i x [ i ] [ j ] ) { 4 maxtemp = m a t r i x [ i ] [ j ] ; 5 } 6 } 7 8 9 } 0 } 1 } 35 / 43

for-schleife: Matrix-Beispiel Implementierung des Matrixbeispiels in Java 1 p u b l i c c l a s s MatrixMax { 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 i n t m a t r i x [ ] [ ] = {{ 46, 795, 13, 468 }, 4 { 965, 648, 5, 60 }, 5 { 67, 464, 84, 541 } } ; 6 7 i n t maximum [ ] = new i n t [ 4 ] ; 8 i n t maxtemp = 0 ; 9 0 f o r ( i n t j = 0 ; j < 4 ; j ++) { 1 2 f o r ( i n t i = 0 ; i < 3 ; i ++) { 3 i f ( maxtemp < m a t r i x [ i ] [ j ] ) { 4 maxtemp = m a t r i x [ i ] [ j ] ; 5 } 6 } 7 maximum [ j ] = maxtemp ; 8 maxtemp = 0 ; 9 } 0 } 1 } Fertig! 35 / 43

Inhaltsverzeichnis 1 Arrays Was ist ein Array? Array-Bauanleitung Mehrdimensionale Arrays Fehlerquellen 2 Schleifen Warum Schleifen? Die while-schleife Die for-schleife Fehlerquellen 36 / 43

Fehler III Wo liegt der Fehler? 1 p u b l i c c l a s s S c h l e i f e n F e h l e r 1 { 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 4 i n t g r e n z e = 1 0 ; 5 i n t z a h l = 1 ; 6 7 w h i l e ( z a h l < g r e n z e ) { 8 // I s t Zahl ungerade? 9 i f ( z a h l % 2 == 1) { 0 System. out. p r i n t l n ( z a h l ) ; 1 z a h l ++; 2 } } } } 37 / 43

Fehler III Wo liegt der Fehler? 1 p u b l i c c l a s s S c h l e i f e n F e h l e r 1 { 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 4 i n t g r e n z e = 1 0 ; 5 i n t z a h l = 1 ; 6 7 w h i l e ( z a h l < g r e n z e ) { 8 // I s t Zahl ungerade? 9 i f ( z a h l % 2 == 1) { 0 System. out. p r i n t l n ( z a h l ) ; 1 z a h l ++; 2 } } } } Kein Compilerfehler $ javac SchleifenFehler1.java Aber Endlosschleife $ java SchleifenFehler1 [...] 37 / 43

Lösung III: Auf Laufvariablen achten! Problem: Laufvariable wird an einer Stelle hochgezählt, die irgendwann nicht mehr erreicht wird Fehler behoben 1 p u b l i c c l a s s S c h l e i f e n F e h l e r 1 { 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 4 i n t g r e n z e = 1 0 ; 5 i n t z a h l = 1 ; 6 7 w h i l e ( z a h l < g r e n z e ) { 8 // I s t Zahl ungerade? 9 i f ( z a h l % 2 == 1) { 0 System. out. p r i n t l n ( z a h l ) ; 1 } 2 zahl++; 3 } 4 } 5 } Immer darauf achten, dass die Laufvariable hochgezählt wird! Gute formatierte Klammerung und Einrückung hilft. 38 / 43

Fehler IV Wo liegt der Fehler? 1 p u b l i c c l a s s S c h l e i f e n F e h l e r 2 { 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 4 i n t g r e n z e = 9 ; 5 i n t z a h l = 1 1 ; 6 7 w h i l e ( z a h l!= g r e n z e ) { 8 z a h l ++; 9 } 0 } 1 } 39 / 43

Fehler IV Wo liegt der Fehler? 1 p u b l i c c l a s s S c h l e i f e n F e h l e r 2 { 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 4 i n t g r e n z e = 9 ; 5 i n t z a h l = 1 1 ; 6 7 w h i l e ( z a h l!= g r e n z e ) { 8 z a h l ++; 9 } 0 } 1 } Kein Compilerfehler $ javac SchleifenFehler2.java Aber Endlosschleife $ java SchleifenFehler2 [...] 39 / 43

Lösung IV: Auf Variablenbereich achten! Problem: Laufvariable wird beim Hochzählen nie den Wert von grenze erreichen, da sie schon von Anfang an höher ist Fehler behoben 1 p u b l i c c l a s s S c h l e i f e n F e h l e r 2 { 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 4 i n t g r e n z e = 9 ; 5 i n t z a h l = 1 1 ; 6 7 w h i l e ( z a h l < g r e n z e ) { 8 z a h l ++; 9 } 0 } 1 } Abbruchbedingung so gestalten, dass sie irgendwann erfüllt wird Im Zweifelsfall wird Schleife ganz übersprungen 40 / 43

Alternative Lösung IV: Abbruch mit break Der letzte Ausweg: break 1 p u b l i c c l a s s S c h l e i f e n F e h l e r 2 B r e a k { 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 4 i n t g r e n z e = 9 ; 5 i n t z a h l = 1 1 ; 6 7 w h i l e ( z a h l!= g r e n z e ) { 8 z a h l ++; 9 0 i f ( z a h l > 1000) { 1 b r e a k ; // Zahl zu gro ß Abbruch 2 } 3 } 4 System. out. p r i n t l n ( F e r t i g. ) ; 5 } 6 } Herausspringen aus der innersten aktuellen Schleife Danach wird darunter weitergemacht (Hier Ausgabe Fertig. ) 41 / 43

Fehler V Wo liegt der Fehler? 1 p u b l i c c l a s s S c h l e i f e n F e h l e r 3 { 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 4 f o r ( i n t i = 0 ; i < 1 0 ; i ++) { 5 System. out. p r i n t l n ( H a l l o + i ) ; 6 } 7 System. out. p r i n t l n ( Tschü s s + i ) ; 8 } 9 } 42 / 43

Fehler V Wo liegt der Fehler? 1 p u b l i c c l a s s S c h l e i f e n F e h l e r 3 { 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 4 f o r ( i n t i = 0 ; i < 1 0 ; i ++) { 5 System. out. p r i n t l n ( H a l l o + i ) ; 6 } 7 System. out. p r i n t l n ( Tschü s s + i ) ; 8 } 9 } Compilerfehler $ javac SchleifenFehler3.java SchleifenFehler3.java:7: cannot find symbol symbol : variable i location: class SchleifenFehler3 System.out.println("Tschüss " + i); ^ 1 error i ist nur innerhalb der for-schleife gültig. 42 / 43

Zusammenfassung: Schleifen Schleifen: Folge von Befehlen Werden immer wieder ausgeführt Wiederholung, solange eine bestimmte Bedingung erfüllt ist Oft mit Zähl- oder Laufvariable (oft i genannt) Syntax: while-schleife: while (bedingung ) { befehle } for-schleife: for (initialisierung ; bedingung ; hochzählen ) { befehle } 43 / 43