Sie sind auf Seite 1von 60

(Java):

Häufige Fehler und


andere Geschichten
Schleifen

2
Schleifenbedingungen 1
Gewünscht: 5 Schleifendurchläufe
public static void main(String[] args) {
int count = 0;

for (int i = 1; i < 5; i++) {


count++;
}

System.out.println("Count = " + count);


}

Ausgabe?

3
Schleifenbedingungen 1
Gewünscht: 5 Schleifendurchläufe
public static void main(String[] args) {
int count = 0;

for (int i = 1; i < 5; i++) {


count++;
}

System.out.println("Count = " + count);


}

i 1 2 3 4 5
i<5 ✓ ✓ ✓ ✓ X

4
Schleifenbedingungen 1
Gewünscht: 5 Schleifendurchläufe
public static void main(String[] args) {
int count = 0;

for (int i = 1; i <= 5; i++) {


count++;
}

System.out.println("Count = " + count);


}

i 1 2 3 4 5 6
i <= 5 ✓ ✓ ✓ ✓ ✓ X

5
Schleifenbedingungen 1
Gewünscht: 5 Schleifendurchläufe
public static void main(String[] args) {
int count = 0;

for (int i = 0; i < 5; i++) {


count++;
}

System.out.println("Count = " + count);


}

i 0 1 2 3 4 5
i<5 ✓ ✓ ✓ ✓ ✓ X

6
Schleifenbedingungen 2
Gewünscht: 5 Schleifendurchläufe
public static void main(String[] args) {
int count = 0;

for (int i = 0; i <= 5; i++) {


count++;
}

System.out.println("Count = " + count);


}

Ausgabe?

7
Schleifenbedingungen 2
Gewünscht: 5 Schleifendurchläufe
public static void main(String[] args) {
int count = 0;

for (int i = 0; i <= 5; i++) {


count++;
}

System.out.println("Count = " + count);


}

i 0 1 2 3 4 5
i <= 5 ✓ ✓ ✓ ✓ ✓ ✓

8
Schleifenbedingungen 2
Gewünscht: 5 Schleifendurchläufe
public static void main(String[] args) {
int count = 0;

for (int i = 0; i < 5; i++) {


count++;
}

System.out.println("Count = " + count);


}

i 0 1 2 3 4 5
i<5 ✓ ✓ ✓ ✓ ✓ X

9
Schleifenbedingungen 3: do-while
Gewünscht: 0 Schleifendurchläufe
public static void main(String[] args) {
int count = 0;

do {
System.out.println("Run: " + count);
count++;
} while (count < 0);

System.out.println("Count = " + count);


}

Ausgabe?

10
Schleifenbedingungen 3: do-while
Gewünscht: 0 Schleifendurchläufe
public static void main(String[] args) {
int count = 0;

do {
System.out.println("Run: " + count);
count++;
} while (count < 0);

System.out.println("Count = " + count);


}

Lösung: for oder while-Schleife verwenden

11
Laufvariablen 1
Gewünscht: 5 Schleifendurchläufe
public static void main(String[] args) {
int count = 0;

for (int i = 0; i < 5; i++) {


count++;
i++;
}

System.out.println("Count = " + count);


}

Ausgabe?

12
Laufvariablen 1
Gewünscht: 5 Schleifendurchläufe
public static void main(String[] args) {
int count = 0;

for (int i = 0; i < 5; i++) {


count++;
i++;
}

System.out.println("Count = " + count);


}

Durchlauf 1 2 3 4
i 0 2 4 6
i<5 ✓ ✓ ✓ X

13
Laufvariablen 1
Gewünscht: 5 Schleifendurchläufe
public static void main(String[] args) {
int count = 0;

for (int i = 0; i < 5; i++) {


count++;
i++;
}

System.out.println("Count = " + count);


}

Durchlauf 1 2 3 4 5 6
i 0 1 2 3 4 5
i<5 ✓ ✓ ✓ ✓ ✓ X

14
Laufvariablen 2
Gewünscht: 5 Schleifendurchläufe

public static void main(String[] args) {


int i = 0;

while (i < 5) {
System.out.println("Run: " + i);
}

System.out.println(„Count: " + i);


}

Ausgabe?

15
Laufvariablen 2
Gewünscht: 5 Schleifendurchläufe

public static void main(String[] args) {


int i = 0;

while (i < 5) {
System.out.println("Run " + i);
}

System.out.println("Count = " + i);


}

Durchlauf 1 2 3 4 … …
i 0 0 0 0 0 0 =Endlosschleife
i<5 ✓ ✓ ✓ ✓ ✓ ✓

16
Laufvariablen 2
Gewünscht: 5 Schleifendurchläufe
public static void main(String[] args) {
int i = 0;

while (i < 5) {
System.out.println("Run " + i);
i++;
}

System.out.println("Count = " + i);


}

Durchlauf 1 2 3 4 5 6
i 0 1 2 3 4 5
i<5 ✓ ✓ ✓ ✓ ✓ X

17
Laufvariablen 3
Gewünscht: 5 Schleifendurchläufe
public static void main(String[] args) {
int i = 0;

do {
System.out.println("Run: " + i);
} while (i < 5);

System.out.println("Count: " + i);


}

Ausgabe?

18
Laufvariablen 3
Gewünscht: 5 Schleifendurchläufe
public static void main(String[] args) {
int i = 0;

do {
System.out.println("Run: " + i);
} while (i < 5);

System.out.println("Count: " + i);


}

Durchlauf 1 2 3 4 … …
i 0 0 0 0 0 0 =Endlosschleife
i<5 ✓ ✓ ✓ ✓ ✓ ✓

19
Laufvariablen 3
Gewünscht: 5 Schleifendurchläufe
public static void main(String[] args) {
int i = 0;

do {
System.out.println("Run: " + i);
i++;
} while (i < 5);

System.out.println("Count: " + i);


}

Durchlauf 1 2 3 4 5 6
i 0 1 2 3 4 5
i<5 ✓ ✓ ✓ ✓ ✓ X

20
Arrays (und Schleifen )

1 2 3 4 87328472 7472347

21
Ein Array
Größe: 5
Aber ... Indizes?

0 0 0 0 0
Index i ? ? ? ? ?

public static void main(String[] args) {


int[] array = new int[5];
}

22
Ein Array
Gewünscht: Ausgabe des 5. Elements

0 0 0 0 0
Index i 1 2 3 4 5

public static void main(String[] args) {


int[] array = new int[5];

int nr5 = array[5];

System.out.println("Nr 5: " + nr5);


}

23
Ein Array
Gewünscht: Ausgabe des 5. Elements

0 0 0 0 0
Index i 1 2 3 4 5

public static void main(String[] args) {


int[] array = new int[5];

int nr5 = array[5];

System.out.println("Nr 5: " + nr5);


}

24
Ein Array
Gewünscht: Ausgabe des 5. Elements

0 0 0 0 0
Index i 0 1 2 3 4

public static void main(String[] args) {


int[] array = new int[5];

int nr5 = array[4];

System.out.println("Nr 5: " + nr5);


}

25
Ein Array, mit was drin
Gewünscht:

1 2 3 4 5

public static void main(String[] args) {


int[] array = {1, 2, 3, 4, 5};

int theThree = array[3];

System.out.println(theThree);
}

26
Ein Array, mit was drin
Gewünscht:

1 2 3 4 5
Index i 0 1 2 3 4
public static void main(String[] args) {
int[] array = {1, 2, 3, 4, 5};

int theThree = array[3];

System.out.println(theThree);
}

27
Ein Array, mit was drin
Gewünscht:

1 2 3 4 5
Index i 0 1 2 3 4

public static void main(String[] args) {


int[] array = {1, 2, 3, 4, 5};

int theThree = array[2];

System.out.println(theThree);
}

28
Noch ein Array
Länge: unbekannt  n = array.length
Indices?

Index i 1 2 … n-1 n

29
Noch ein Array
Länge: unbekannt  n = array.length
Indices?

Index i 1 2 … n-1 n

30
Noch ein Array
Länge: unbekannt  n = array.length
Indices!

Index i 0 1 … n-2 n-1

31
Noch ein Array

Index i 0 1 … n-2 n-1

In Java?

public static void main(String[] args) {


int[] array = getArray();

int lastEntry = array[array.length];

System.out.println("Nr 5: " + lastEntry);


}

32
Noch ein Array

Index i 0 1 … n-2 n-1

In Java?

public static void main(String[] args) {


int[] array = getArray();

int lastEntry = array[array.length];

System.out.println("Nr 5: " + lastEntry);


}

33
Noch ein Array

Index i 0 1 … n-2 n-1

In Java?

public static void main(String[] args) {


int[] array = getArray();

int lastEntry = array[array.length - 1];

System.out.println("Nr 5: " + lastEntry);


}

34
Arrays und Indices

Länge n
Indices 0 … n-1

35
Arrays und Indices

Länge array.length

Indices 0 ... array.length -1

36
Arrays und Schleifen 1
Ziel: Ausgabe aller Elemente

1 2 3 4 5
Index i 0 1 2 3 4
public static void main(String[] args) {
int[] array = {1, 2, 3, 4, 5};

for (int i = 0; i <= 5; i++) {


System.out.println("Wert " + i + ": " + array[i]);
}
}

37
Arrays und Schleifen 1
Ziel: Ausgabe aller Elemente

1 2 3 4 5
Index i 0 1 2 3 4

public static void main(String[] args) {


int[] array = {1, 2, 3, 4, 5};

for (int i = 0; i <= 5; i++) {


System.out.println("Wert " + i + ": " + array[i]);
}
}

38
Arrays und Schleifen 1
Ziel: Ausgabe aller Elemente

1 2 3 4 5
Index i 0 1 2 3 4

public static void main(String[] args) {


int[] array = {1, 2, 3, 4, 5};

for (int i = 0; i < 5; i++) {


System.out.println("Wert " + i + ": " + array[i]);
}
}

39
Arrays und Schleifen 1
Ziel: Ausgabe aller Elemente

1 2 3 4 5
Index i 0 1 2 3 4
public static void main(String[] args) {
int[] array = {1, 2, 3, 4, 5};

int length = array.length;

for (int i = 0; i < length; i++) {


System.out.println("Wert " + i + ": " + array[i]);
}
}

40
Arrays und Schleifen 2
Ziel: Ausgabe aller Elemente

1 2 n-1 n
Index i 0 1 … n-2 n-1

public static void main(String[] args) {


int[] array = getArray();

int length = array.length;

for (int i = 0; i <= length; i++) {


System.out.println("Wert " + i + ": " + array[i]);
}
}

41
Arrays und Schleifen 2
Ziel: Ausgabe aller Elemente

1 2 n-1 n
Index i 0 1 … n-2 n-1

public static void main(String[] args) {


int[] array = getArray();

int length = array.length;

for (int i = 0; i < length; i++) {


System.out.println("Wert " + i + ": " + array[i]);
}
}

42
Arrays und Schleifen

Länge: array.length
i: i < array.length

(Für einen vollen Durchlauf)

43
Aufruf von Unterprogrammen

44
Aufruf von Unterprogrammen
Unsere Unterprogramme:
public static int input() { … } //Eingabe einer Zahl

public static int process(int operand) { … } //Bearbeitung der eingegebenen Zahl

public static void output(int number) { … } //Ausgabe der bearbeiteten Zahl

45
Aufruf von Unterprogrammen
public static int input() { … } //Eingabe einer Zahl

public static int process(int operand) { … } //Bearbeitung der eingegebenen Zahl

public static void output(int number) { … } //Ausgabe der bearbeiteten Zahl

public static void main(String[] args) {


input();
process();
output();
}

46
Aufruf von Unterprogrammen
public static int input() { … } //Eingabe einer Zahl

public static int process(int operand) { … } //Bearbeitung der eingegebenen Zahl

public static void output(int number) { … } //Ausgabe der bearbeiteten Zahl

public static void main(String[] args) {


input();
process(); //Fehler: Parameter fehlt
output(); //Fehler: Parameter fehlt
}
Programm kann nicht
gestartet werden.

47
Aufruf von Unterprogrammen
public static int input() { … } //Eingabe einer Zahl

public static int process(int operand) { … } //Bearbeitung der eingegebenen Zahl

public static void output(int number) { … } //Ausgabe der bearbeiteten Zahl

public static void main(String[] args) {


int number = 0;
input();
process(number);
output(number);
}

48
Aufruf von Unterprogrammen
public static int input() { … } //Eingabe einer Zahl

public static int process(int operand) { … } //Bearbeitung der eingegebenen Zahl

public static void output(int number) { … } //Ausgabe der bearbeiteten Zahl

public static void main(String[] args) {


int number = 0;
input(); //Fehler: Rückgabewert wird ignoriert
process(number); //Fehler: Rückgabewert wird ignoriert
output(number);
}
Programm wird gestartet, liefert
aber ein falsches Ergebnis.
Ausgabe: 0

49
Aufruf von Unterprogrammen
public static int input() { … } //Eingabe einer Zahl

public static int process(int operand) { … } //Bearbeitung der eingegebenen Zahl

public static void output(int number) { … } //Ausgabe der bearbeiteten Zahl

public static void main(String[] args) {


int number = 0;
number = input();
process(number);
output(number);
}

50
Aufruf von Unterprogrammen
public static int input() { … } //Eingabe einer Zahl

public static int process(int operand) { … } //Bearbeitung der eingegebenen Zahl

public static void output(int number) { … } //Ausgabe der bearbeiteten Zahl

public static void main(String[] args) {


int number = 0;
number = input();
process(number); //Fehler: Ergebnis der Bearbeitung
//wird ignoriert
output(number);
} Programm wird gestartet, liefert
aber ein falsches Ergebnis.
Ausgabe: Eingegebener Wert

51
Aufruf von Unterprogrammen
public static int input() { … } //Eingabe einer Zahl

public static int process(int operand) { … } //Bearbeitung der eingegebenen Zahl

public static void output(int number) { … } //Ausgabe der bearbeiteten Zahl

public static void main(String[] args) {


int number;
number = input();
int result;
result = process(number);
output(result);
}

52
Aufruf von Unterprogrammen
public static int input() { … } //Eingabe einer Zahl

public static int process(int operand) { … } //Bearbeitung der eingegebenen Zahl

public static void output(int number) { … } //Ausgabe der bearbeiteten Zahl

public static void main(String[] args) {


int number;
number = input();
number = process(number);
output(number);
}

53
Aufruf von Unterprogrammen
public static int input() { … } //Eingabe einer Zahl

public static int process(int operand) { … } //Bearbeitung der eingegebenen Zahl

public static void output(int number) { … } //Ausgabe der bearbeiteten Zahl

public static void main(String[] args) {


output(process(input()));
}

54
Values & References
Ein einfaches Beispiel…
int alpha = 9; alpha 9

int beta = alpha;

beta++;
beta 10
9
System.out.println(beta);

Ausgabe: 10

55
Values & References
int[] alpha = {1, 2, 3, 4, 5}; alpha 1 2 3 4 5
int[] beta = alpha;

beta

56
Values & References
int[] alpha = {1, 2, 3, 4, 5}; alpha 10 10 10 10 10
int[] beta = alpha;

beta

Ziel:
beta: int-Array der Länge 5, mit lauter 10 befüllt
alpha: nicht verändert

for (int i = 0; i < beta.length; i++) {


beta[i] = 10;
}

57
Values & References
int[] alpha = {1, 2, 3, 4, 5}; alpha 1 2 3 4 5
int[] beta = alpha;

beta 10 10 10 10 10

Ziel:
beta: int-Array der Länge 5, mit lauter 10 befüllt
alpha: nicht verändert

//Beispielsweise
beta = new int[5];

for (int i = 0; i < beta.length; i++) {


beta[i] = 10;
}

58
Values & References
Das gilt auch für Unterprogramme!
Array-Parameter sind Kopien, referenzieren jedoch dasselbe Array!

public static void main(String[] args) {


int[] arrayInMain = {1, 2, 3, 4, 5}; arrayInMain
processArray(arrayInMain);
}

1 2 3 4 5

public static void processArray(int[] arrayToProcess) {


// ...
}
arrayToProcess

59
(Java):
Häufige Fehler und
andere Geschichten

PROGRAM ON!