Я проходил тест на 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.