web-dev-qa-db-fra.com

Opérateur ternaire pour renvoyer une valeur - Java/Android

Vient de passer de PHP à Java

J'ai rencontré le problème suivant

Je veux réécrire

if(usrname.equals(username) && (passwd.equals(password))){
    return true;
}
else{
    return false;
}

comme 

(usrname.equals(username) && passwd.equals(password) )? return true : return false;

cela ne fonctionne pas (erreur de syntaxe) cependant,

int a=1;
int b=2;
int minVal = a < b ? a : b;

travaille

Pourquoi les opérateurs ternaires ne se comportent pas correctement lorsqu'ils renvoient une valeur en fonction de certaines conditions

MODIFIER

return  (usrname.equals(username) && passwd.equals(password)); 

pourrait être solution si elle retourne booléen.

disons que j'ai besoin

 (usrname.equals(username) && passwd.equals(password) )? return "member": return "guest";
14
sumit

Tu peux faire

return (usrname.equals(username) && passwd.equals(password) )?  true : false;

true et false peuvent être remplacés par la valeur de retour souhaitée. Si c'est juste booléen, alors vous pouvez éviter complètement l'opérateur ternaire. Il suffit de faire

return  (usrname.equals(username) && passwd.equals(password));
31
Aniket Thakur

disons que j'ai besoin

  (usrname.equals(u) && passwd.equals(p)) ? return "member" : return guest";

La syntaxe correcte est la suivante:

   return (usrname.equals(u) && passwd.equals(p)) ? "member" : "guest";

La forme générale de l’opérateur ternaire est

   expression-1 ? expression-2 : expression-3

expression-1 a le type boolean, et expression-2 et expression-3 ont le même type.

Dans votre code, vous utilisiez des instructions return où des expressions sont requises. En Java, une instruction return n'est PAS une expression valide.


Cela dit, le meilleur moyen d'écrire votre exemple n'utilise pas du tout l'opérateur conditionnel:

   return usrname.equals(username) && passwd.equals(password);
15
Stephen C

Pourquoi redondant boolean 

Juste utiliser

return  (usrname.equals(username) && passwd.equals(password));

En passant, vous pouvez simplifier:

return (usrname.equals (nom d'utilisateur) && passwd.equals (mot de passe))? return true: retourne faux;

À:

return usrname.equals (nom d'utilisateur) && passwd.equals (mot de passe); 

L'opérateur ternaire fonctionne de manière similaire en php à Java, je pense que vous avez commis une erreur stupide, peut-être que "nom d'utilisateur" a un espace ou un autre caractère blanc

String a1 = "a";
String b1 = "b";

String a2 = "a";
String b2 = "b";

System.out.println((a1.equals(a2)&&b1.equals(b2))?"true":"false");

il retourne "vrai"

1
Troncador