Skiwmish
Skiwmish

Reputation: 13

If else condition and logical operators

This is my code for searching a 2 places that call the method of the polyline. When my editext Tabaco - Malinao it's calling the method properly same as Tabaco-Bacacay, Tabaco-Santo Domingo, Tabaco-Malilipot. But when my edittext is Malilipot-Santo Domingo, Santo Domingo-Bacacay it's always calling for the first condition (Tabaco-Malinao) not their own condition.

Could be the condition is wrong? or the logical operators that I'm using?

My understanding is that, it takes what comes first and not taking the equal sign correctly. This could be wrong.

String origin = etOrigin.getText().toString();
    String destination = etDestination.getText().toString();
            if (origin.equals("Tabaco") == destination.equals("Malinao") && origin.equals("Malinao") == destination.equals("Tabaco")) {
            ttom();
            Toast.makeText(getApplicationContext(), "tabaco malinao", Toast.LENGTH_SHORT).show();
        } else if (origin.equals("Tabaco") == destination.equals("Bacacay") && origin.equals("Bacacay") == destination.equals("Tabaco")) {
            ttob();
            Toast.makeText(getApplicationContext(), "tabaco bacacay", Toast.LENGTH_SHORT).show();
        } else if (origin.equals("Tabaco") == destination.equals("Santo Domingo") && origin.equals("Santo Domingo") == destination.equals("Tabaco")) {
            ttosto();
            Toast.makeText(getApplicationContext(), "tabaco sto domingo", Toast.LENGTH_SHORT).show();
        } else if (origin.equals("Tabaco") == destination.equals("Malilipot") && origin.equals("Malilipot") == destination.equals("Tabaco")) {
            ttomali();
            Toast.makeText(getApplicationContext(), "tabaco malilipot", Toast.LENGTH_SHORT).show();
        } else if (origin.equals("Malilipot") == destination.equals("Santo Domingo") && origin.equals("Santo Domingo") == destination.equals("Malilipot")) {
            malitosto();
            Toast.makeText(getApplicationContext(), "malilipot sto domingo", Toast.LENGTH_SHORT).show();
        } else if (origin.equals("Malilipot") == destination.equals("Bacacay") && origin.equals("Bacacay") == destination.equals("Malilipot")) {
            malitobac();
            Toast.makeText(getApplicationContext(), "malilipot bacacay", Toast.LENGTH_SHORT).show();
        } else if (origin.equals("Santo Domingo") == destination.equals("Bacacay") && origin.equals("Bacacay") == destination.equals("Santo Domingo")) {
            bactosto();
            Toast.makeText(getApplicationContext(), "sto domingo bacacay", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(this, "Invalid input!", Toast.LENGTH_SHORT).show();
}

Upvotes: 1

Views: 115

Answers (3)

Mitesh Machhoya
Mitesh Machhoya

Reputation: 434

here is the explanation why it's going in the first condition...

String origin = "Malilipot";
    String destination = "Santo Domingo";
    if(origin.equals("Tabaco") == destination.equals("Malinao") && origin.equals("Malinao") == destination.equals("Tabaco"))

    origin.equals("Tabaco")  = false
    destination.equals("Malinao") = false
    origin.equals("Tabaco") == destination.equals("Malinao")
            false           ==      false 
            result will be  = true

    origin.equals("Malinao")  = false
    destination.equals("Tabaco") = false

    origin.equals("Malinao") == destination.equals("Tabaco")
                    false    ==       false

            result will be = true


    at your last condition will be if (true == true)
            it will be : true


    thats why its going in first condition

Upvotes: 0

Arnaud
Arnaud

Reputation: 17534

The logic is wrong, let's say that you have :

String origin = "Malilipot";

String destination = "Santo Domingo";

Then origin.equals("Tabaco") is false and destination.equals("Malinao") is also false .

So origin.equals("Tabaco") == destination.equals("Malinao") yields false == false which is true, despite the fact that it absolutely doesn't match what you thought was your condition.

Refactor your code to only use && (AND) and || (OR) operators :

if (origin.equals("Tabaco") == destination.equals("Malinao") && origin.equals("Malinao") == destination.equals("Tabaco")) 

Becomes

if ((origin.equals("Tabaco") && destination.equals("Malinao")) || (origin.equals("Malinao") && destination.equals("Tabaco"))) 

Upvotes: 3

MJM
MJM

Reputation: 5311

Change the condition like below ,in your case when you enter Malilipot-Santo Domingo as per first condition

if (origin.equals("Tabaco") == destination.equals("Malinao") && origin.equals("Malinao") == destination.equals("Tabaco"))

origin.equals("Tabaco") is false and destination.equals("Malinao") is also false then false == false it become true same for next condition

String origin = etOrigin.getText().toString();
        String destination = etDestination.getText().toString();
                if ((origin.equals("Tabaco") && destination.equals("Malinao")) ||( origin.equals("Malinao") == destination.equals("Tabaco"))) {
                ttom();
                Toast.makeText(getApplicationContext(), "tabaco malinao", Toast.LENGTH_SHORT).show();
            } else if ((origin.equals("Tabaco") && destination.equals("Bacacay")) || ( origin.equals("Bacacay") && destination.equals("Tabaco"))) {
                ttob();
                Toast.makeText(getApplicationContext(), "tabaco bacacay", Toast.LENGTH_SHORT).show();
            } else if ((origin.equals("Tabaco") && destination.equals("Santo Domingo")) ||( origin.equals("Santo Domingo") && destination.equals("Tabaco")) ){
                ttosto();
                Toast.makeText(getApplicationContext(), "tabaco sto domingo", Toast.LENGTH_SHORT).show();
            } else if ((origin.equals("Tabaco") && destination.equals("Malilipot") )||( origin.equals("Malilipot") && destination.equals("Tabaco"))) {
                ttomali();
                Toast.makeText(getApplicationContext(), "tabaco malilipot", Toast.LENGTH_SHORT).show();
            } else if ((origin.equals("Malilipot") && destination.equals("Santo Domingo") )||( origin.equals("Santo Domingo") && destination.equals("Malilipot"))){
                malitosto();
                Toast.makeText(getApplicationContext(), "malilipot sto domingo", Toast.LENGTH_SHORT).show();
            } else if ((origin.equals("Malilipot") && destination.equals("Bacacay")) ||( origin.equals("Bacacay") && destination.equals("Malilipot"))) {
                malitobac();
                Toast.makeText(getApplicationContext(), "malilipot bacacay", Toast.LENGTH_SHORT).show();
            } else if (origin.equals("Santo Domingo") && destination.equals("Bacacay") )||( origin.equals("Bacacay") && destination.equals("Santo Domingo"))) {
                bactosto();
                Toast.makeText(getApplicationContext(), "sto domingo bacacay", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(this, "Invalid input!", Toast.LENGTH_SHORT).show();
    }

Upvotes: 2

Related Questions