Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
public static int Suche(char Buchstabe) {
for(int j=0;j<=iAlphabet;j++) {
if(cAlphabet[j]==Buchstabe) {
return j;
}
if(j==iAlphabet) {
return iAlphabet-1;
}
}
Aus einem mir nicht bekannten Grund will der Debugger ein return-statement, aber ich habe bereits 2 eingebaut. Er schlägt mir vor, ein return-statement direkt am Anfang der Funktion zu platzieren. Das ist natürlich Quark. Könnt ihr mir helfen?
Die returns werden von den if-Blöcken verdeckt. Der Compiler kann also für die Methode keinen Return-Wert ermitteln. Deshalb, so wie von Gast schon gesagt, eine return-Anweisung außerhalb des if-Blocks unterhalb der letzten schließenden geschweiften Klammer einfügen.
Da die zweite Bedingung nur im letzten Schleifendurchlauf erfüllt ist, geht das in diesem Fall auch einfacher - man kann diese Bedingung weglassen das entsprechende return nach der Schleife machen (ist egal, ob es im letzen Schleifendurchlauf oder nach Ende der Schleife passiert):
Code:
public static int suche( char buchstabe) {
for( int j=0;j<=iAlphabet;j++) {
if( cAlphabet[j]==buchstabe) {
return j;
}
}
return iAlphabet-1;
}
Generell rate ich davon ab, mehrere return Statements in einer Methode zu verwenden. Lieber das Ergebnis in einer sprechenden Variable (result) speichern und diese am Ende der Methode mit dem einizgen return zurueckliefern. Das GOTO Zeitalter haben wir doch bereits ueberwunden... :-D
Wenn du z.B. eine Liste durchiterierst und einen gewissen Wert brauchst ist es unnötige Objekterzeugung die Referenz zwischenzuspeichern. Außerdem musst du dann (um sinnvoll zu arbeiten) die For mit break; vorzeitig beenden, dann kannst den Wert auch gleich rauswerfen.
Sollte garkein Wert gefunden werden schmeißt man anschließend entweder ein Null raus oder lässt eine Exception fliegen, wie es beliebt.
Muss euch beiden recht geben, 2 return statements sind aber imho das Limit(speziell wegen der schleife), ein break ist nicht unbedingt weniger "goto" als 2 return statements.
Gerade bei längeren Methoden trägt das sicher zur Lesbarkeit bei. Aber ob in diesem Fall die Varianten
Code:
public static int suche( char buchstabe) {
int result = -1;
for( int j=0;j<=iAlphabet;j++) {
if( cAlphabet[j]==buchstabe) {
result = j;
break;
}
}
if ( result < 0) result = iAlphabet-1
return result;
}
Oder auch
Code:
public static int suche( char buchstabe) {
int result = -1;
for( int j=0;j<=iAlphabet;j++) {
if( cAlphabet[j]==buchstabe) {
result = j;
break;
}
if( j==iAlphabet) {
result = iAlphabet-1;
}
}
return result;
}