Логический пример возврата неожиданного ответа - PullRequest
0 голосов
/ 27 августа 2018

Я проходил тест на Java, данный на indiabix , и там логический вопрос звучал примерно так -

public class If2 
{
    static boolean b1, b2;
    public static void main(String [] args) 
    {
        int x = 0;
        if ( !b1 ) /* Line 7 */
        {
            if ( !b2 ) /* Line 9 */
            {
                b1 = true;
                x++;
                if ( 5 > 6 ) 
                {
                    x++;
                }
                if ( !b1 ) /* Line 17 */
                    x = x + 10;
                else if ( b2 = true ) /* Line 19 */
                    x = x + 100;
                else if ( b1 | b2 ) /* Line 21 */
                    x = x + 1000;
            }
        }
        System.out.println(x);
    }
}

Теперь объяснение говорит - В качестве переменных экземпляра b1 и b2 инициализируются как false. Тесты if в строках 7 и 9 успешны, поэтому для b1 установлено значение true, а значение x увеличивается. Следующее, если проверка прошла успешно, находится в строке 19 (обратите внимание, что код не проверяет, чтобы увидеть, является ли b2 истинным, он устанавливает b2 в истинное значение). Поскольку строка 19 прошла успешно, последующие операторы else-if (строка 21) будут пропущены. Таким образом, ответ приходит к 101, а не к 111. Но почему бы игнорировать if ( !b1 ) в строке 17. Является ли то, что if ( !b1 ) в строке 7 считается верным, а последующее появление if ( !b1 ) в строке 17 игнорируется. В моем понимании ответ должен быть 111, а не 101.

Ответы [ 4 ]

0 голосов
/ 27 августа 2018

Это очень легко понять. в строке № 11 b1 устанавливается значение true.и после x увеличивается на 1. так x=1. Затем в строке № 17, если условие становится ложным !b1=>!true, поэтому добавить не выполнять.

Затем строка № 19, условие становится истинным и добавьте 100 к x, т.е. x=x+100. итак 101.

0 голосов
/ 27 августа 2018

Оператор if в строке 17 действительно действительно оценивается.В этот момент b1 имеет значение true, поскольку ему присвоено значение true в строке 11. Это означает, что !b1 оценивается как ложное.

Поскольку if в строке 17 не удалось выполнить, остальные if получаютшанс бежать.В этом случае b2 = true всегда будет иметь значение true, поскольку выражение присваивания всегда будет соответствовать присваиваемому значению.В результате, x, который был равен 1, теперь равен 101, с добавлением к нему 100.

Предположим, что !b1 было верно в строке 17, тогда else if (b2 = true) не будет выполняться, и выполучит 11 в качестве вывода.

0 голосов
/ 27 августа 2018

Привет! Это нормально работает, проверьте ваши комбинации условий

public class If2 {
    static boolean b1, b2;

    public static void main(String[] args) {
        int x = 0;
        if (!b1) /* Line 7 */
        {
            System.out.println("1"+b1);
            if (!b2) /* Line 9 */
            {   System.out.println("2"+b2);
                b1 = true;
                System.out.println("2.1 b1 is"+b1);
                x++;
                if (5 > 6) {
                    x++;
                }
                System.out.println("3"+b1);
                System.out.println("4"+b2);
                if (!b1) /* Line 17 */  //Vipul:- as    b1 is true this will not invoke         
                x = x + 10;             
                else if (b2 = true) /* Line 19 */ //Vipul:- as  b2 is true this will  invoke    
                    x = x + 100;
                else if (b1 | b2) /* Line 21 */
                    x = x + 1000;
                System.out.println("X"+x);
            }
        }
        System.out.println(x);
    }
}
0 голосов
/ 27 августа 2018

В строке 17 b1 уже true, поскольку в строке 11 было установлено true. Поэтому if ( !b1 ) оценивается в false.

Следовательно, только else if ( b2 = true ) оценивается как true (а также присваивает true b2) и добавляет 100 к x.

x уже был увеличен один раз до этого (строка 12), поэтому он заканчивается значением 101.

Обратите внимание, что 111 был бы невозможным выводом, даже если if ( !b1 ) оценивается как true, так как в этом случае else if ( b2 = true ) не будет оцениваться и x получит значение 11.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...