Finden Sie die Fehlerursachen basierend auf dem Code und der Kompilerausgabe.
Aufgabe A: Schleifen und Typen (ähnlich wie Übungsblatt 4 Aufgabe 15)
public class Rechner { public static void main(String[] args) { final int grenze = 5; int ergebnis; grenze = 10; for (int i = 0; i < grenze i++) { ergebnis += i; } boolean check = 1; System.out.println(ergebnis); }}
Kompilerausgabe:
1. Rechner.java:5: error: cannot assign a value to final variable grenze
2. Rechner.java:6: error: ';' expected
3. Rechner.java:7: error: variable ergebnis might not have been initialized
4. Rechner.java:9: error: incompatible types: int cannot be converted to boolean
Lösungsvorschlag
Zeile
Fehlerursache
Korrektur
5
Variable grenze ist final, darf also nicht geändert werden.
Zeile 5 löschen oder final entfernen.
6
Semikolon fehlt im Schleifenkopf.
for (int i=0; i<grenze; i++)
7
ergebnis wird gelesen (+=), ist aber nicht initialisiert.
In Zeile 4: int ergebnis = 0;
9
Zahl (1) kann nicht in boolean umgewandelt werden.
boolean check = true;
Aufgabe B: Arrays und Syntax (ähnlich wie Übungsblatt 4 Aufgabe 15)
public class ArrayTest { public static void main(String[] args) { double[] zahlen = new double[3]; zahlen[0] = 1.5; int index = 0; int wert = zahlen[index]; if (wert = 1) { System.out.prntln("Gefunden"); } flot f = 1.0f; }}
Kompilerausgabe:
1. ArrayTest.java:6: error: incompatible types: possible lossy conversion from double to int
2. ArrayTest.java:7: error: incompatible types: int cannot be converted to boolean
3. ArrayTest.java:8: error: cannot find symbol (method prntln)
4. ArrayTest.java:10: error: cannot find symbol (class flot)
Lösungsvorschlag
Zeile
Fehlerursache
Korrektur
6
double Array-Wert passt nicht in int Variable.
Casten: (int) zahlen[index] oder Typ ändern.
7
Zuweisung = statt Vergleich ==. if braucht boolean.
if (wert == 1)
8
Tippfehler: prntln existiert nicht.
System.out.println(...)
10
Tippfehler: flot existiert nicht.
float f = 1.0f;
Aufgabe C: Scope und Methoden (etwas komplexer als in der Übung)
public class ScopeTest { public static void main(String[] args) { if (true) { int temp = 10; } System.out.println(temp); druckeZahl(); } public static void druckeZahl(int n) { System.out.println(n); return n; }}
Kompilerausgabe:
1. ScopeTest.java:6: error: cannot find symbol: variable temp
2. ScopeTest.java:7: error: method druckeZahl cannot be applied to given types
3. ScopeTest.java:12: error: incompatible types: unexpected return value
Lösungsvorschlag
Zeile
Fehlerursache
Korrektur
6
Scope: temp existiert nur im if-Block.
int temp vor dem if-Block deklarieren.
7
Methode erwartet int Argument, keines gegeben.
druckeZahl(5);
12
Methode ist void, darf nichts zurückgeben.
return n; entfernen oder Rückgabetyp ändern.
Aufgabe D: Static und Variablen (etwas komplexer als in der Übung)
public class StaticTest { int globalWert = 99; public static void main(String[] args) { globalWert = 100; berechne(5.5); } public static void berechne(int x) { int x = 10; System.out.println(x); }}
Kompilerausgabe:
1. StaticTest.java:5: error: non-static variable globalWert cannot be referenced from a static context
2. StaticTest.java:6: error: incompatible types: possible lossy conversion from double to int
3. StaticTest.java:10: error: variable x is already defined in method berechne(int)
Lösungsvorschlag
Zeile
Fehlerursache
Korrektur
5
Zugriff auf Instanz-Variable aus statischer Methode.
Variable static machen: static int globalWert...
6
Typkonflikt: double (5.5) an int Parameter.
Aufruf ändern: berechne(5);
10
Name x doppelt vergeben (Parameter & lokale Var).
Lokale Variable umbenennen oder nur Zuweisung machen.
Aufgabe E: Komplexe Fehleranalyse (Umfangreich)
Analysieren Sie den Code der Klasse DatenManager. Er enthält fünf verschiedene Kompilerfehler.
public class DatenManager { public static void main(String[] args) { double[] messwerte = {1.2, 3.5, 4.8}; int summe; for (int i = 0; i <= messwerte.length; i++) { summe = summe + messwerte[i]; } String info = "Ergebnis: " + summe; if (summe > 10) { boolean status = true; } System.out.println(info + " Status: " + status); checkLimit(summe); } public static void checkLimit(int s) { if (s > 100) return true; else return false; }}
Kompilerausgabe:
1. DatenManager.java:7: error: variable summe might not have been initialized
2. DatenManager.java:7: error: incompatible types: possible lossy conversion from double to int
3. DatenManager.java:15: error: cannot find symbol: variable status
4. DatenManager.java:20: error: incompatible types: unexpected return value
5. DatenManager.java:21: error: incompatible types: unexpected return value
Lösungsvorschlag
Zeile
Fehlerursache
Korrektur
7
Initialisierung:summe wird gelesen (summe + ...), hat aber noch keinen Startwert.
int summe = 0; in Zeile 4.
7
Typkonflikt:messwerte sind double. Das Ergebnis der Addition ist double und passt nicht in int.
Casten: (int)messwerte[i] oder Datentyp von summe ändern.
15
Scope (Sichtbarkeit): Die Variable status existiert nur innerhalb des if-Blocks (Zeilen 11-13).
boolean status = false; vor dem if-Block deklarieren.
20/21
Rückgabetyp: Die Methode ist void, darf also keine Werte (true/false) zurückgeben.
Methodenkopf ändern zu: public static boolean checkLimit...