Ternary operator to return value- Java/Android

62,246

Solution 1

You can do

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

true and false can be replaced by any return value you want. If it is just boolean then you can avoid ternary operator altogether. Just do

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

Solution 2

lets say I need

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

The correct syntax is:

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

The general form of the ternary operator is

   expression-1 ? expression-2 : expression-3

where expression-1 has type boolean, and expression-2 and expression-3 have the same type1.

In your code, you were using return statements where expressions are required. In Java, a return statement is NOT a valid expression.

1 - This doesn't take account of the conversions that can take. For the full story, refer to the JLS.


Having said that, the best way to write your example doesn't uses the conditional operator at all:

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

Solution 3

Why redundant boolean

Just use

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

Solution 4

By the way you can simplify:

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

To:

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

The ternary operator work similar in php than Java, I think you have made a silly mistake, maybe "username" have a space or another white character

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

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

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

it return "true"

Share:
62,246

Related videos on Youtube

sumit
Author by

sumit

I am full stack developer

Updated on April 24, 2020

Comments

  • sumit
    sumit about 4 years

    Just switched to Java from php

    I encountered following issue

    I want to rewrite

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

    as

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

    it is not working(syntax error) however,

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

    is working

    Why ternary operator are not behaving correctly while returning value depending on some condition

    EDIT

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

    could be solution if it return boolean .

    lets say i need

     (usrname.equals(username) && passwd.equals(password) )? return "member": return "guest";
    
    • August
      August over 9 years
      return usrname.equals(username) && (passwd.equals(password) ?
    • VVB
      VVB over 9 years
      Try this : String b = (usrname.equals(username) && passwd.equals(password) )? "member": "guest";
  • Stephen C
    Stephen C over 9 years
    Two other people have already said that. And re your update, no that's not the problem. The problem is that the OP got the syntax wrong.
  • Troncador
    Troncador over 9 years
    :o I figured out, you can't put the return inside the ternary operator. I haven't see that in your code the first time