2014-04-14 13 views
6

Mam pytanie dotyczące zwrotnych oświadczeń używanych w ramach oświadczeń if()while() lub for(). Jak widać w poniższej metodzie, oczekuje się, że I return wartość ciągu. Problem polega na tym, że gdybym użył return w moim bloku instrukcji if, kompilator zwróci błąd missing return statement."Brak instrukcji zwrotnej" w przypadku, gdy/za/podczas

public String myMethod() 
{ 
    if(condition) 
    { 
     return x; 
    } 
} 

Oczywiście mogę zmienić nagłówek metody do void i używać System.out.println zamiast return. Ale czy to właściwa droga? czy czegoś brakuje?

Każda pomoc jest bardzo ceniona.

+2

Co się stanie, jeśli warunek nie jest spełniony? Co zwraca twoja metoda w takim przypadku? – devnull

+0

Można zwrócić wartość domyślną (np. Null), jeśli wartość nie zostanie znaleziona. Wywołując metodę, sprawdza się, czy wartość jest równa wartości domyślnej i czy można sprawdzić, czy zwrócona wartość powinna być dalej przetwarzana. – Pphoenix

+0

powinieneś dodać instrukcję "return" po poleceniu "if" lub "else" –

Odpowiedz

5

Jeśli umieścisz powrócić oświadczenie w if, while lub for oświadczenie to może być lub może nie powrócić wartość. Jeśli nie wejdzie do tego wyrażenia, to również ta metoda powinna zwrócić pewną wartość (która może być pusta). Aby to zapewnić, kompilator wymusi zapisanie instrukcji return, która jest po if, while lub .

Ale jeśli piszesz if/else blok i każdy z nich jest o powrót w to wtedy kompilator wie, że albo if lub else dostanie wykonać i metoda zwróci wartość. Więc tym razem kompilator nie będzie cię zmuszał.

if(condition) 
{ 
return; 
} 
else 
{ 
return; 
} 
+0

Myślę, że ogólnie powinien on po prostu nauczyć się, że musi wrócić przed ostatnim nawrotem każdej metody, która nie jest pustką. Ponieważ ma zamiar ponownie sformułować swoje pytanie z tym innym, otoczonym następnym razem. – CodeCamper

+0

Powiedziałbym, że używanie wielu instrukcji zwrotnych nie jest rozwiązaniem. Lepiej jest mieć tylko jedną instrukcję "return" na końcu funkcji/metody. –

3

To dlatego, że funkcja potrzebuje, aby zwrócić wartość. Wyobraź sobie, co się stanie, jeśli wykonasz myMethod() i nie przejdzie ona do if(condition), co by zwróciło twoją funkcję? Kompilator musi wiedzieć, co wrócić w każdej możliwej realizacji swojej funkcji

Sprawdzanie dokumentacji Java:

Definicja: Jeżeli deklaracja metoda ma typ zwracanej to musi być return na końcu metody. Jeśli nie zostanie zwrócona instrukcja return , zgłoszony zostanie brakujący komunikat dotyczący instrukcji return.

Ten błąd jest również zgłaszany, jeśli metoda nie ma typu zwrotu i nie została zgłoszona przy użyciu nieważności (tj. Pomyłkowo została pominięta ).

można zrobić, aby rozwiązać swój problem:

public String myMethod() 
{ 
    String result = null; 
    if(condition) 
    { 
     result = x; 
    } 
    return result; 
} 
0

To dlatego, jeśli nie idą w jeśli nie ma nic do powrotu, więc nie przegap zwrot. :)

powinno być:

public String myMethod() 
{ 
    if(condition) 
    { 
     return x; 
    } 
    return y; 
} 
0

ta zwróci ciąg tylko jeśli warunek jest spełniony.

public String myMethod() 
{ 
    if(condition) 
    { 
     return x; 
    } 
    else 
     return ""; 
} 
+1

'null' są zawsze ** BAD ** return połączenie !!! –

+0

Naprawiono, thx. –

2

Spróbuj z, tak jakby if condition zwraca wartość false, więc zwróci puste, w przeciwnym razie nic nie zwróci.

public String myMethod() 
{ 
    if(condition) 
    { 
     return x; 
    } 
return "" 
} 

Ponieważ kompilator nie wie, czy którykolwiek z tych bloków zostanie kiedykolwiek osiągnięty, więc daje błąd.

0

spróbuj tego:

public String myMethod() 
{ 
    if(condition) 
    { 
     return x; 
    } 

    return ""; //returns empty string 
} 
0
public String myMethod() // it ALWAYS expects a String to be returned 
{ 
    if(condition) // will not execute always. Will execute only when condition is true 
    { 
     return x; // will not be returned always. 
    } 
    //return empty string here 

} 
2

To nielegalne składnia.Jest to opcjonalne, aby zwrócić zmienną. MUSISZ zwrócić zmienną typu określonego w twojej metodzie.

public String myMethod() 
{ 
    if(condition) 
    { 
     return x; 
    } 
} 

Jesteś skutecznie mówiąc obiecuję każda klasa może użyć tej metody (publiczne) i obiecuję będzie zawsze zwracać ciąg (string).

Następnie mówisz, że jeśli mój stan jest prawdziwy, zwrócę x. Cóż, szkoda, w twojej obietnicy nie ma IF. Obiecałeś, że myMethod ZAWSZE zwróci ciąg znaków. Nawet jeśli twój warunek jest ZAWSZE prawdziwy, kompilator musi założyć, że istnieje możliwość, że będzie on fałszywy. Dlatego zawsze powinieneś umieścić zwrot na końcu swojej nieważnej metody poza wszelkimi warunkami JUST IN CASE wszystkie twoje warunki zawodzą.

public String myMethod() 
{ 
    if(condition) 
    { 
     return x; 
    } 
    return ""; //or whatever the default behavior will be if all of your conditions fail to return. 
} 
0

Musisz dodać zwrotną instrukcję, jeśli condition jest fałszywe.

public String myMethod() { 
    if(condition) { 
     return x; 
    } 

// if condition is false you HAVE TO return a string 
// you could return a string, a empty string or null 
    return otherCondition; 
} 

FYI:

Oracle docs for return statement

0

Wszelkie jak myMethod() powinna zwrócić wartość String .Co jeśli warunek jest fałszywy jest myMethod powrócić coś? ans nie ma więc musisz zdefiniować wartość zwracaną null lub pewną wartość ciągu w fałszywym warunku

public String myMethod() { 
    boolean c=true; 
    if (conditions) { 
     return "d"; 
    } 
    return null;//or some other string value 
} 
Powiązane problemy