Добрый день,
Вопрос по примеру со страницы 133, Шилдт, "Полное руководство".
Дан пример по вложенным условным операторам (картинка ниже).
Мог бы кто-нибудь начертить блок-схему выполнения данной программы?
0
Комментарии (7)
популярные
новые
старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Благодарю за обратную связь!
Посмотрите, пожалуйста, верно начертил исходный пример?
В особенности меня интересует вопрос:
Верно ли я изобразил на схеме второй условный блок с неполным ветвлением? Его так изображают, если нет else, но следом за ним ещё одно условие. Надо ведь эти условия как-то соединить. Изначально и было непонимание, как нарисовать.
З.Ы. По поводу "по рукам бить". Ну на Шилдта молятся, как я понял. Хотя, если почитать форумы, у каждого своя "священная корова" в виде любимой книги.
Да, схема верная. Хотя ее читать сложнее чем код ) честно :) в жизни таких не составлял если честно.
Молиться можно на что угодно, но есть понятие хорошего кода и плохого. Хороший код это легко читаемый легко поддерживаемый и в первую очередь консистентный код.
Я понимаю зачем в книжке показали именно так - нужно было показать пример, но вот в реальном проекте вас за такое по голове не погладят.
Ну и показывать "спорные" моменты лучше с соответствующим комментарием в тексте, мол вот вы видите код, но он приведен только что бы показать как работает фича. А best practices у нас вот такие:...
Ну и чтобы не быть голословным, что в этом примере не правильно?
1. Его тяжело читать, у вас, как человека не опытного он вызвал вопросы.
2. Применяется два разных подхода, классический со скобками и inline.
3. У inline по сравнению с классическим есть вполне конкретное ограничение - только одна строка кода, в то время как подход с фигурными скобками дает вам свободу писать там хоть мемуары.
Java ругают за перегруженность кода, что мол много в ней лишнего, скобки, точки с запятыми, объявления переменных с типами, но хороший код на Java не нуждается даже в документации, его можно читать как открытую книгу именно из-за того что там всегда ясно что есть что и к чему относится, благодаря этой самой перегруженности.
Я почему нарисовал эту схему:
Мне не совсем понятно, почему третий условный блок идёт за вторым, но, как видно из схемы, от него не зависит. По сути, второй условный блок выполнен (a=b), а третий просто следует за ним. Хотя это ведь вложение...
if(i ==10){if(j <20){
a = b;}if(k >100){
c = d;}else{
a = c;}}else{
a = d;}
У нас есть внешнее условие if (i == 10), если он оверно мы заходим внутрь, иначе просто делается a = d и на этом заканчиваем.
А вложенных условных операторов как видите два. if (j < 20), у него нет условия else, т.е. действие происходит только в случае выполнения условия, и код идет выполняться дальше.
И второй вложенный if это k > 100, соответственно у него есть блок else ну и как водится работает или то или другое.
Просто читайте код сверху вниз :)
Добро. Ну то есть второй и третий if-ы являются "вложенными" по отношению только к самому первому. А по отношению друг к другу происходит просто их последовательное выполнение.
У меня вопрос по книгам:
В дополнение к JavaRush есть книга уровня "elementary" автора Яков Файн "Программирование для детей, дедов и пр...". Написана, на первый взгляд, очень доступным языком. Но книга издана в 2011 на русском. На English "посвежее" нашёл 2015 года. Насколько они актуальны на текущий момент?
По диагонали посмотрел оба варианта. Некоторые параграфы точь-в-точь, а вот GUI в новой версии переработали. Например, вместо Swing сделали JavaFX: "Java has an older library of GUI components called Swing, and the new one called JavaFX. We’ll use only JavaFX in this book"
По книгам я не большой советчик, читать я их начал "по диагонали" уже на более менее осознанном уровне. Там могу посоветовать и Effective java Блоха, и Thinking in Java Эккеля, и Алгоритмы Седжвика.
Но по всей остальной литературе могу достаточно смело утверждать, что книги старше 1-2 лет выпуска (не перевода, а именно выпуска) можно уже не читать.
Минимальная версия Java которая там должна быть описана это 8, остальное уже мусор, да и 8 хоть и держит пальму первенства сейчас постепенно позиции сдает.
Что касается гуёвых войн и закапывания Swing просто имейте в виду, что Intellij IDEA написана на свинге и активно развивается, как и все ее производные, а вот про Java FX вроде слышал что он маленько пованивает уже, но тут я не авторитет, GUI это не моя парафия. В целом джавка это по большей части бекенд и серверная часть, там гуй не то что бы и нужен.
Расставь фигурные скобочки и тебе сразу станет ясно что к чему относится. Вообще за такое написание стоило бы бить по рукам если честно.
Такая "inline" запись действительно допустима. Если условие под if верно, то выполнится то что на строчке за ним. И только это!
if(a > b)System.out.println("A greater than B");//эта запись эквивалентна более классической:if(a > b){System.out.println("A greater than B");}//и не возникает вопросов к какому блоку кода что относится.//так например вот это уже имеет другой смыслif(a > b)System.out.println("A greater than B");System.out.println("This will appear anyway");//вторая фраза будет выведена в консоль независимо от того что у нас под if
Принцип тот же что и в математике, каждой открывающей скобке должна соответствовать закрывающая. Если открывающих было уже несколько, а закрывающих пока ни одной, то следующая закрывающая закроет последнюю открывающую.
Ну или же можно это назвать стеком. Последний вошедший выходит первым.