-1
votes

Confus sur la façon d'utiliser || et && dans le même moment si la déclaration. Quelqu'un peut-il repérer le problème?

Je suis confus sur la façon d'utiliser || code> et && code> dans la même instruction.

Ce que j'essaie de faire est d'imprimer quelque chose si le String commence avec un "d" code> ou un "o" code>, et si l'on est vrai, vérifiez si la chaîne a une longueur de caractère de deux. P>

Exemple: si la chaîne est "de" code> il imprimera quelque chose. Cependant, si c'est "SE" code> il n'imprimera rien. P>

else if( (answer.startsWith("D") || answer.startsWith("O")) 
            && (answer.length() == 2) ) {
 //print something
}


4 commentaires

Votre logique a l'air correcte pour moi. Quel est le problème réel ici?


Notez que vous pouvez également utiliser "de" .matches ("[faire].") comme raccourci ici.


Il se pourrait que ce ne soit pas ramifiant dans le sinon si partie. Êtes-vous sûr que votre si échoue?


Tout dépend de ce que la condition initiale si est peut-être quant à savoir si votre autre si sera vérifié. Si la condition initiale si la condition de l'instruction est vraie, votre ele) si ne sera pas exécuté.


3 Réponses :


-2
votes

Dans ce cas, vous devez vérifier la longueur d'abord car && sera true si le côté gauche et le côté droit vrais xxx


1 commentaires

Je ne vois pas pourquoi tu dis ça. Les tests startswith n'échoueront pas si vous les faites d'abord, et les tests Longueur n'échoueront pas si vous les faites de seconde.



0
votes

Java applique un "court-circuit" à votre logique. Il fait la première partie (commence par "D" ou "O") et si c'est vrai, il procède à la deuxième partie (la longueur est 2). Toutefois, si la première partie est évaluée à FALSE, elle ne risque jamais d'exécuter la deuxième partie.

Votre chaîne "SE" n'ira jamais dans le bit "Imprimer quelque chose" car il ne respecte pas votre premier critère de commencer D ou O. et sur la base de votre description de ce que la logique devrait être correcte.

Si vous voulez réellement que si cela commence par "D" ou "O" << strong> ou Est-ce de 2 caractères alors que votre relevé logique aurait dû être: xxx

éditer: oups, juste collé le code d'origine dans la première fois ...! < / p>


0 commentaires

-1
votes

Je vérifierais d'abord la longueur et après les deux conditions par ex. xxx


1 commentaires

La modification de l'ordre d'exécution ne modifiera pas le résultat dans ce cas et l'imbrication supplémentaire ne fait rien d'être mis à part de limiter potentiellement le compilateur de faire des optimisations telles que la logique à court-circuit.