2016-09-26 3 views
1

Ma question est simplement:Est-il possible de ne pas appeler une instruction If-Else's Else?


  • Est-il possible d'autre déclarations ne sont pas garantis dans certains cas (sauf quand, break, continue ou le retour est appelé au préalable)?

Par exemple: dans ce code une instruction else suit à la fin avec un appel de retour, mais l'erreur: [Cette méthode doit renvoyer un résultat de type booléen]. C'est comme s'il y avait une possibilité que l'autre ne soit pas appelé si l'instruction "if" est fausse.

public static boolean palindrome(String s){ 
    if (s.length() == 1){ 
    return false; 
    } 
    else if (s.length() == 2){ 
     if(s.toLowerCase().trim().charAt(0) >= 'a' && s.toLowerCase().trim().charAt(0) <= 'z' && s.toLowerCase().trim().charAt(0) == s.toLowerCase().trim().charAt(s.length())){ 
     return true; 
     } 
     else return false; 
    } 
    else if(s.toLowerCase().trim().charAt(0) >= 'a' && s.toLowerCase().trim().charAt(0) <= 'z'){ 
     if(s.toLowerCase().trim().charAt(s.length()-1) >= 'a' && s.toLowerCase().trim().charAt(s.length()-1) <= 'z'){ 
     if(s.toLowerCase().trim().charAt(0) == s.toLowerCase().trim().charAt(s.length()-1)) 
      return true && palindrome(s.substring(1,s.length()-1)); 
     } 
     else return palindrome(s.substring(0, s.length()-1)); 
    } 
    } 
+0

Fermez l'autre si les crochets de boucle avant de commencer avec la partie else :) –

+1

Oh, ça alors, pouvez-vous s'il vous plaît ajuster le code pour faire un seul 's.toLowerCase(). Trim()' au début? Vous verrez mieux les accolades correspondantes (ou non correspondantes). –

+0

Merci, je vois ça maintenant! Merci de garder la communauté et de faire tourner Madhu. Je sais Adrian, je veux, mais c'est une tâche de classe et mon prof n'a spécifié aucun local! –

Répondre

1

Votre déclaration else return palindrome(s.substring(0, s.length()-1)); correspond à la déclaration if(s.toLowerCase().trim().charAt(s.length()-1) >= 'a' && ... intérieure, de sorte que votre externe if-else, si le bloc n'a pas d'autre déclaration. Vous devriez en ajouter un (ou déplacer cette autre instruction là, si c'est ce que la logique exige).

Par exemple, vous pouvez modifier

... 
else if(s.toLowerCase().trim().charAt(0) >= 'a' && s.toLowerCase().trim().charAt(0) <= 'z'){ 
    if(s.toLowerCase().trim().charAt(s.length()-1) >= 'a' && s.toLowerCase().trim().charAt(s.length()-1) <= 'z'){ 
    if(s.toLowerCase().trim().charAt(0) == s.toLowerCase().trim().charAt(s.length()-1)) 
     return true && palindrome(s.substring(1,s.length()-1)); 
    } 
    else return palindrome(s.substring(0, s.length()-1)); 
} 

à

... 
else if(s.toLowerCase().trim().charAt(0) >= 'a' && s.toLowerCase().trim().charAt(0) <= 'z'){ 
    if(s.toLowerCase().trim().charAt(s.length()-1) >= 'a' && s.toLowerCase().trim().charAt(s.length()-1) <= 'z'){ 
    if(s.toLowerCase().trim().charAt(0) == s.toLowerCase().trim().charAt(s.length()-1)) 
     return palindrome(s.substring(1,s.length()-1)); 
    } 
} else { 
    return palindrome(s.substring(0, s.length()-1)); 
} 

Bien sûr, qui vous laisse avec quelques chemins d'exécution sans instruction de retour - par exemple, lorsque l'état de if(s.toLowerCase().trim().charAt(0) == s.toLowerCase().trim().charAt(s.length()-1)) est false, vous n'avez aucune déclaration de retour. Au lieu de faire correspondre une clause else à chaque instruction if, vous pouvez envisager d'ajouter une déclaration finale en tant que dernière instruction de la méthode. Cela pourrait simplifier votre code.

+0

Oh mon dieu! la correspondance! Alors, c'est encore une déclaration stable, j'ai eu une crise de la quarantaine et j'ai perdu espoir dans 'else'. Content de savoir que je peux encore lui faire confiance. –

+0

@JasonIvey Vous brute, voyez ce que vous avez fait avec votre style de codage bâclé? Vous vous êtes poussé dans la crise de la quarantaine. Si vous continuez sur le même chemin, vous aurez des idées suicidaires à un moment donné. Sérieusement homme, le style ne compte pas seulement à la mode. –

+0

Je sais ... J'ai déclaré un tableau d'int comme celui-ci hier (int ar []) ... Cela fonctionne mais .... mais l'automutilation empire ... bientôt je vais utiliser la récursivité pour équations complexes parce que j'aime les algorithmes plus lents .. me fait sentir comme les humains sont encore plus intelligents que les machines ... Ce chemin que je suis conduit à toutes mes variables étant x, y et z ... Alors le suicide serait juste une sortie de ce rocher bleu tournant, oh cette roche bleue filante riche en carbone ... Peut-être que c'est ainsi que l'humanité a fini ... d'autres déclarations déplacées ... –