Если еще условие и логические операторы

Это мой код для поиска в 2 местах, которые вызывают метод polyline, Когда мой editext Табако - Малинао, он вызывает метод правильно, как Табако-Бакакай, Табако-Санто-Доминго, Табако-Малилипот. Но когда мой edittext Малилипот-Санто-Доминго, Санто-Доминго-Бакакай, он всегда призывает к первому условию (Табако-Малинао), а не к их собственному состоянию.

Может ли быть условие неправильно? или логические операторы, которые я использую?

Насколько я понимаю, для этого нужно то, что стоит на первом месте, а не правильно принимать знак равенства. Это может быть неправильно.

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();
}

3 ответа

Решение

Логика неверна, скажем, что у вас есть:

String origin = "Malilipot";

String destination = "Santo Domingo";

затем origin.equals("Tabaco") является falseа также destination.equals("Malinao") это также false,

Так origin.equals("Tabaco") == destination.equals("Malinao") доходность false == false который trueнесмотря на то, что это абсолютно не соответствует вашему состоянию.

Рефакторинг вашего кода только для использования && (И и || (ИЛИ) операторы:

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

становится

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

Измените условие, как показано ниже, в вашем случае, когда вы вводите Malilipot-Santo Domingo согласно первому условию

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

origin.equals("Tabaco") имеет значение false, а destination.equals("Malinao") также имеет значение false, тогда false == false становится истинным для следующего условия

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();
    }

Вот объяснение, почему это происходит в первом условии...

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
Другие вопросы по тегам