Курсы по программированию

Формула программиста

основатель — Волосатов Евгений Витольдович
Поздравляю с 1 сентября! Система начисления Байтов работает.

J6. Условия / IF - Quiz

  • На этом уроке прошу решить тест по условному оператору.
    Приложите скриншот любой ошибки, только давайте честно.
  • Дата отправки отчёта: 12 января 2019 г.
  • Задание выполнено: за 57 мин.
  • Чему научился: прокололся на первом же тесте, не посмотрев внимательно, что последний else не имеет отношения к нижней строке и она является независимой от этого else инструкцией.
    Стыдно )

    curly braces {} - фигурные скобки

    Булевские переменные можно логически складывать в проверке условия (X&&y)

    (x||y) булевские с противоположными значениями дадут в результате true

    Эти математические тесты показали что переменные, это действительно переменные - значение, что было у икса или игрека при инициализации забудь, после того, как к ним был применен инкремент или декремент - они уже другие! Супертесты!

    А вот тут не понял отчего мне ошибку нарисовали:


    What will be the output of the following program?

    class DemoOnCompare {
        public static void main(String args[]) {
            int first = 10, second;
            if (first < 10)
                second = 1;
            if (first >= 10)
                second = 2;
            System.out.println("y is " + second);
        }
    }

    Я выбрал ответ y is 2
    а он указан как неверный и правильный вот этот:
    Compilation Error or Runtime Error

    Что не так, кроме разве что (String args[]) разве что, неясно.
    Кто видит ошибку - отзовись!
  • Оценка видео-уроку:
Отчёт от 17947 за J6. Условия / IF - Quiz


Отчёт от 17947 за J6. Условия / IF - Quiz




Оцени работу

 
Сохранить страницу:

13417. --
Chip
Chip
ответить
→  Dmitry Sinitsin  # J6. Условия / IF - Quiz / 2019-01-12 20:19

У меня тоже в этом тесте была ошибка. Дело в том, что Java не разрешает использовать неинициализированные переменные. В этом коде создается переменная first, ей присваивается значение 10. Далее, на этой же строчке создается переменная second, ей НЕ присваивается начальное значение. Дальше идут два if, первый не срабатывает, второй да, подходит по условию. В результате second будет присвоено 2 и все должно БЫТЬ хорошо.

Но нет :) Как этот код видит компилятор? Он смотрит, то что есть одно условие, в нем присваивается значение переменной second. Есть второй if, там тоже есть присваивание. Мы, люди, понимаем, что эти два if взаимоисключающие, и какой-то из них один точно сработает. Но видимо компилятор Java не настолько умён. Он думает, что либо они могут оба сработать, либо вообще никакой. То есть, вместо 2 вариантов он выделяет 4 комбинации. В одной из этих комбинаций для second сначала бы присвоилось 1, а потом 2. А в другой комбинации, ни 1 и ни 2 бы не присвоились. И вот компилятор думает, как же так, МОЖЕТ быть ситуация, что second останется без инициализации и отказывается компилировать код. А вот если бы мы изменили этот код и написали бы

if (first < 10)
    second = 1;
else
    second = 2;

то код скомпилируется, потому что у компилятора только два выбора, либо 1, либо 2 :)


  • Отчёт оценивали:
    18688Arslan+1   13417Chip+1   2146Иван+1   20295Николай+1   17425ser2018+1   9752chokayes+1   791Валерий Жданов+1   1Евгений Волосатов+1   3922Александр+1   20659no name+1   10895Danil42Russia+1   8275Tekashnik+1   Посетитель+1   Посетитель+1  

Начинаем практику по языку C#





Если вы пришли без приглашения -
введите тысяча двадцать четыре (цифрами).
Чтобы стать хорошим программистом — нужно писать программы. На нашем сайте очень много практических упражнений.

После заполнения формы ты будешь подписан на рассылку «C# Вебинары и Видеоуроки», у тебя появится доступ к видеоурокам и консольным задачам.

Несколько раз в неделю тебе будут приходить письма — приглашения на вебинары, информация об акциях и скидках, полезная информация по C#.

Ты в любой момент сможешь отписаться от рассылки.


Научился: Хороший тест, проверяет внимательность, и заставляет вчитываться в задание и компилировать все в голове.
Трудности: Вспомнить детали, на которых раньше не зацикливался



Научился: Точно не могу сказать. Много раз по глупости перезагружал страницу. Думаю около 5 из 16 ошибок.
Трудности: Вычисление формулы с остатком в переменных int (в которых нет остатка).