Java Kompilerfehler Training

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...