Sitzung: Jeden Freitag in der Vorlesungszeit ab 16 Uhr c. t. im MAR 0.005. In der vorlesungsfreien Zeit unregelmäßig (Jemensch da?). Macht mit!

Javakurs/Übungsaufgaben/Errors

CompilerFehler

Klammer fehlt

bruja shabanov 10 (Desktop/JavaKurs): javac Errors.java
Errors.java:7: '}' expected
^
1 error
  • Es fehlt einfach eine geschweifte Klammer.
  • Jedes mal wenn ihr eine geschweifte Klammer aufmacht, macht sie gleich wieder zu, damit ihrs später nicht vergesst.
  • Bei Klammerfehlern solltet ihr nach jedem korrigierten Fehler neukompilieren, da es normalerweise zu sehr vielen Folgefehlern kommt.

Doppelte Deklaration

bruja shabanov 11 (Desktop/JavaKurs): javac Errors.java Errors.java:5: i is already defined in main(java.lang.String[])
                for( int i = 0 ; i < 10 ; i++ ){
                         ^
1 error
  • Die Variable i ist irgendwo bereits definiert gewesen. Sucht also vor dieser Zeile nach einem:
int i = ..
  • Ihr müsst dann den Variablennamen in der Schleife z.B. ändern.


Definition fehlt

bruja shabanov 5 (Desktop/JavaKurs): javac Errors.java
Errors.java:15: variable ret might not have been initialized
                return ret;
                       ^
1 error
  • Ihr habt eine Variable nicht richtig initialisiert, das passiert oft wenn ihr einer Variable innerhalb einer if-Anweisung Werte zuweist, wie in diesem Code ( der zudem obigen Fehler führt ):
	public static String someMethod( int x ){
		String ret;
		if( x ==  4711 ){
			ret = "foobar";
		}
		return ret;
	}
  • Die Variable ret bekommt nur dann einen Wert zugeordnet wenn x == 4711 gilt, da dies nicht immer der Fall sein muss, könnte der Fall auftreten, dass ret gar keinen Wert zugeordnet bekommt.
  • Fügt einen default Wert für ret hinzu um diesen Fehler zu beheben, z.B. so:
 		String ret = "";


Missing return statement

bruja shabanov 6 (Desktop/JavaKurs): javac Errors.java
Errors.java:17: missing return statement
        }
        ^
1 error
  • Ihr habt in einer Methode, die etwas zurückgeben soll entweder das return vergessen, oder das return steht nur innerhalb von if Anweisungen, wie hier:
	public static boolean isPositive( int num ){
		if( num > 0 ){
			return true;
		}else if( num < 0 ){
			return false;
		}			
	}
  • Da alle returns in einem if Block stehen, könnte es theoretisch sein, dass keiner der Blöcke ausgeführt wird und Java somit nicht weiss was es zurück geben soll.
  • Fügt um das Problem zu Lösen ein return am Ende euerer Mthode ein, oder ändert ein else if in ein else.
       public static boolean isPositive( int num ){
		if( num > 0 ){
			return true;
		}else if( num < 0 ){
			return false;
		}			
		return false;
	}

LaufzeitFehler

java.lang.NoClassDefFoundError

bruja shabanov 7 (Desktop/JavaKurs): java Errors
Exception in thread "main" java.lang.NoClassDefFoundError: Errors
  • Heisst Java kann die Klasse nicht finden, die ihr ausführen wollt.
  • Schaut genau nach ob der Dateiname und der Klassennamme gleich sind. Dabei ist auch wichtig die Groß/Klein Schreibung zu beachten. Ausserdem achtet darauf ob ihr in die Konsole die richtigen Namen eingetippt habt.


java.lang.NoSuchMethodError

bruja shabanov 9 (Desktop/JavaKurs): java Errors
Exception in thread "main" java.lang.NoSuchMethodError: main
  • Java findet eine Methode nicht ( hier speziell die main Methode )
  • Schaut ob ihr beim Aufruf den Methodennamen richtig geschrieben habt.


java.lang.ArrayIndexOutOfBoundsException

bruja shabanov 8 (Desktop/JavaKurs): java Errors
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
        at Errors.main(Errors.java:5)
  • Ihr versucht auf ein Array Feld zuzugreifen, was ausserhalb der Größe des Arrays liegt.
  • Sucht in der angegeben Zeile nach dem Zugriff auf das Array und erweitert notfalls die Größe des Arrays.


java.lang.NullPointerException

bruja shabanov 13 (Desktop/JavaKurs): java Errors
Exception in thread "main" java.lang.NullPointerException
       at Errors.main(Errors.java:5)
  • Ihr versucht auf eine Variable zuzugreifen oder führt mit ihr Operationen aus, obwohl sie noch nicht initialisiert ist.
  • Das passiert oft wenn man mit z.B. String Arrays arbeitet. Obwohl man das Array initialisiert sind die Elemente darin noch nicht initialisiert.
String[] stringArray = new String[12];
  • Hier kann es helfen, den Array Elementen entweder direkt Werte zuzuweisen oder mit einer Schleife alle auf einen default Wert setzen:
for(int i = 0 ; i < stringArray.length ; i++ ){
    stringArray[i] = "";
}

java.lang.ArithmeticException

bruja shabanov 15 (Desktop/JavaKurs): java Errors
Exception in thread "main" java.lang.ArithmeticException: / by zero
        at Errors.main(Errors.java:4)
  • Dieser Fehler tritt auf, wenn ihr versucht ungültige arithmetische Operationen auszuführen, wie hier die Division durch 0.
  • Ihr könnt euch Gedanken über das axiomatische Gerüst der Mathematik machen und nach einem Weg suchen durch 0 zu teilen, einfach ist es jedoch wenn ihr einfach nicht durch 0 teilt, keine Wurzeln aus negativen Zahlen zieht usw.