Compiler-Fehler "Missing return statement" umgehen ?

Hallo,

Da das mein erster Beitrag ist bitte nicht schimpfen :)

In der folgenden Methode (typ boolean) muss ja ein Wahrheitswert zurückgegeben werden. Nun hab ich ne bedingte Anwesung, wo im else-Teil eine WH mit Anfangsbedingung, da drin wieder einen if-Teil.

Der Compiler will am Ende der Methode jetzt true oder false zurück. Kann man das irgendwie geschickt lösen / umgehen? Weil sonst funktioniert ja die Methode nicht richtig...
P.S.: Es sollen keine neuen Attribute angelegt werden!

--> Java-Code:

Java:
public boolean istAufsteigend1I() {
        if (ersterKnoten==null || alleZaehlen()==1){
             return true;
        }else {
            for(Knoten k = ersterKnoten; k.naechstenKnotenGeben() !=null && istAufsteigend1I(); k = k.naechstenKnotenGeben() ) {
                if (k.naechstenKnotenGeben().wertGeben() <= k.wertGeben() ) {
                    return false;
                }
            }
        }
        // return false;  --> umgehen?? 
    }

Nachtrag: jetzt kommt mir ständig ein "Java.lang stack overflow: null" Fehler, wenn ich die Testklasse aufrufe, liegt das daran, dass sich die methode zu oft selbst aufruft, also sozusagen endlose Rekursion?
 
Zuletzt bearbeitet:
M

Marcinek

Gast
Dann musst du deine Methode void machen.

Wenn es eine boolean Methode ist, dann muss sie immer einen Rückgabewert haben.
 
Zuletzt bearbeitet von einem Moderator:
genau, wenn ich das mache, wird die Exception dann in jedem Fall geworfen... Ich hab eine funktionierende Lösung, bei der zwas alles ohne Fehlermeldungen funktioniert, aber das ist glaub ich nicht das, was unser Infolehrer haben möchte. Hier die Alternativlösung:

Java:
public boolean istAufsteigend1I() {
        boolean aufsteigend = true;
        if(ersterKnoten == null || alleZaehlen() == 1){
            aufsteigend = true;
            
        }else {
            for(Knoten n = ersterKnoten; n.naechstenKnotenGeben() != null && aufsteigend; n = n.naechstenKnotenGeben()){
                if(n.naechstenKnotenGeben().wertGeben() <= n.wertGeben()){
                    aufsteigend = false;
                }
            }
        }

        return aufsteigend;
    }
 
M

Marcinek

Gast
Naja man könne da noch das eine oder andere drehen, damit da nicht so mal false mal true steht, aber generell ist das schon richtig.
 

D4rkscr43m

Bekanntes Mitglied
das
Java:
public boolean istAufsteigend1I() {
        boolean aufsteigend = true;
        if(ersterKnoten == null || alleZaehlen() == 1){
            aufsteigend = true;
            
        }else {
            for(Knoten n = ersterKnoten; n.naechstenKnotenGeben() != null && aufsteigend; n = n.naechstenKnotenGeben()){
                if(n.naechstenKnotenGeben().wertGeben() <= n.wertGeben()){
                    aufsteigend = false;
                }
            }
        }

        return aufsteigend;
    }
sollte mit dem hier äquivalent sein:
Java:
public boolean istAufsteigend1I() {
	if(!(ersterKnoten == null || alleZaehlen() == 1)) {
		for(Knoten n = ersterKnoten; n.naechstenKnotenGeben() != null; n = n.naechstenKnotenGeben()) {
			if(n.naechstenKnotenGeben().wertGeben() <= n.wertGeben()) {
				return false;
			}
		}
	}
	return true;
}
vorrausgesetzt, die Methoden
Code:
Knoten#naechstenKnotenGeben
und
Code:
Knoten#wertGeben
ändern nichts an
Code:
ersterKnoten
und dem Ergebnis der Methode
Code:
alleZaehlen
.
 

Neue Themen


Oben