2016-05-29 5 views
0

Hier ist ein Ausschnitt aus meinem Code:in einer Schleife von Fehlern Stuck: unerreichbarer Aussage und keine return-Anweisung zur Verfügung gestellt

public static int dc (String s,int k, int c){ 
    String s1, s2; 
    int m, n; 
    if (check(s, k) != -1) { 
    int p = check(s, k); 
    c++; 
    s1 = s.substring(0, p) + s.substring(p + 1); 
    s2 = s.substring(0, p + 1) + s.substring(p + 2); 
    if ((check(s1, k) == -1) || (check(s2, k) == -1)) { 
     return c; 
    } else { 
     m = dc(s1, k, c); 
     n = dc(s2, k, c); 
     if (m > n) { 
     return n; 
     } else { 
     return m; 
     } 
    } 
    } 
} 

So ist der Fehler sagt, dass es eine fehlende ist return-Anweisung (nicht sicher, welches Szenario habe ich verpasst). Aber wenn ich am Ende eine return-Anweisung hinzufüge, zeigt dies, dass die return-Anweisung nicht erreichbar ist. Ich habe hier eine hilfreiche Antwort gefunden: Unreachable return statement still throws error und ich habe versucht, es in einen Versuch Catch-Block setzen, aber es fragt immer noch nach einer Rückkehr Aussage. Obwohl der Compiler weiß, dass alles, was ich am Ende schreibe, redundant ist, warum zeigt es immer noch einen Fehler?

+0

Diese Methode fehlt keine 'return'-Anweisung in einem Zweig. Vielleicht ist das Problem mit Ihrer 'check' Methode? Könnten Sie seinen Code hinzufügen? – Mureinik

+2

Sie müssen eine Rückgabeanweisung am Ende haben, falls die erste if-Bedingung falsch ist. Dein Leben wäre einfacher, wenn du den richtigen Einzug verwendest. – Eran

+0

Der Code geht nur dann in diese Methode, wenn die Prüfung nicht -1 ist. Soll ich den gesamten Code posten? – Rohinb97

Antwort

1

wenn Ihre erste Prüfung check(s, k) kehrt -1 dann kehren Sie nichts

1

Die erste if-Block nicht über sonst ...

if (Scheck (s, k) = - 1) {

...... }

0

public static int dc(String s, int k,int c){ String s1,s2; int m,n; if(check(s,k)!=-1) { int p=check(s,k); c++; s1=s.substring(0,p)+s.substring(p+1); s2=s.substring(0,p+1)+s.substring(p+2); if((check(s1,k)==-1)||(check(s2,k)==-1)){ return c; } else{ m=dc(s1,k,c); n=dc(s2,k,c); if(m>n){ return n; } else{ return m; } } } // MISSING RETURN BELOW return n; }

ich eine IDE wie ec schlage vor, mit Lipse, es wird dir helfen, diese Dinge zu erkennen. Es fügte buchstäblich die Aussage für mich hinzu.

+0

Nun, ich benutze Eclipse, aber ich habe es direkt auf Codechef codiert, so dass ich faul wurde und keine Einrückungen hinzufügte – Rohinb97