Андроид. Windows. Антивирусы. Гаджеты. Железо. Игры. Интернет. Операционные системы. Программы.

В каком блоке допущена явная ошибка. Победа над неочевидным. Схлопывание внешних отступов. Схлопывание отступов элементов, связанных родительской связью

Какая ошибка допущена в следующем фрагменте кода:for(i = 0; i < 10; i++) {int sum;sum = sum + i;}System.out.println("Sum is: " + sum);В этом фрагменте кода имеются две существенные ошибки. Во-первых, переменная sum создается на каждом шаге цикла for, а следовательно, в промежутке междупоследовательными итерациями предыдущее значение подсчитываемой суммы небудет сохраняться в этой переменной. И во-вторых, переменная sum недоступна запределами кодового блока, в котором она объявлена. Поэтому ссылка на нее привызове метода println () недопустима.

Поясните отличие между префиксной и постфиксной формами оператора инкремента.Если оператор инкремента предшествует операнду, исполняющая система Java выполнит операцию до извлечения значения операнда и использования его в остальной части выражения. Если же оператор инкремента следует за операндом, исполняющая система сначала извлечет значение операнда и лишь затем инкрементируетсам операнд.

Покажите, каким образом укороченный логический оператор И может предотвратить деление на нуль.if((b != 0) && (val / b)) ...Приложение А. Ответы на вопросы для самопроверки 559.

К какому типу продвигаются типы byte и short при вычислении выражения?В выражении типы byte и short продвигаются к типу int.

Когда возникает потребность в явном приведении типов?Явное приведение типов требуется при обращении с несовместимыми типами или втом случае, если преобразование типов приводит к сужению диапазона допустимыхзначений.

Напишите программу, которая находила бы простые числа в пределах от 2 до 100.// Нахождение простых чисел в пределах от 2 до 100.class Prime {public static void main(String args) {int i, j;boolean isprime;for(i=2; i < 100; i++) {isprime = true;// проверить, делится ли число без остаткаfor(j=2; j < i/j; j++)// если число делится без остатка, значит, оно простоеif ((i%j) == 0) isprime = false;if(isprime)System.out.println(i + " is prime.");}}}

Влияют ли лишние скобки на эффективность выполнения программ?Нет, не влияют.

Определяет ли кодовый блок область действия переменных?Да, определяет.Глава 3. Управляющие операторы

Напишите программу, которая вводила бы символы с клавиатуры до тех пор, покане встретится точка. Предусмотрите в программе счетчик числа пробелов. Сведенияо количестве пробелов должны выводиться в конце программы.// Подсчет пробелов,class Spaces {public static void main(String args)throws java.io.IOException {char ch;int spaces = 0;System.out.println("Enter a period to stop.");do {ch = (char) System.in.read();if(ch == 1 ") spaces++;} while (ch ! =System.out.println("Spaces: " + spaces);}}

Какова общая форма многоступенчатой конструкции if-else-if?if(условие)оператор;else if{условие)оператор;else if(условие)оператор;elseоператор;

Допустим, имеется следующий фрагмент кода:if (х < 10)if(у > 100) {if(!done) х = z;else у = z;}else System.out.println("error"); // что если?С каким из операторов if связан последний оператор else?Последний оператор else соответствует билижайшему оператору if того же уровня,т.е. if (у > 100).

Напишите цикл for, в котором перебирались бы значения от 1000 до 0 с шагом -2.for(int i = 1000; i >= 0; i -= 2) // ...

Корректен ли следующий фрагмент кода?for(int i = 0; i < num; i++)sum += i;count = i;Нет, не корректен. Переменная i недоступна за пределами цикла for, в которомона объявлена.

Какие действия выполняет оператор break? Опишите оба рарианта этого оператора.Оператор break без метки вызывает немедленное завершение текущего цикла иливыражения switch. А оператор break с меткой передает управление в конец помеченного блока.

Какое сообщение будет выведено после выполнения оператора break в приведенном ниже фрагменте кода?for(i = 0; i < 10; i++) {while(running) {if(x

Что будет выведено на экран в результате выполнения следующего фрагмента кода?for (int i = 0; i<10; i++) {System.out.print(i + " ");if((i%2) == 0) continue;System.out.println();}На экране появится следующий результат:о 12 34 56 78 9

Итерационное выражение для цикла for не обязательно должно изменять переменную цикла на фиксированную величину. Эта переменная может принимать произвольные значения. Напишите программу, использующую цикл for для вывода чиселв геометрической прогрессии 1, 2, 4, 8, 16, 32 и т.д./ Применение цикла for для формированиягеометрической прогрессии 1, 2, 4, 8, 16, 32 и т.д. /class Progress {public static void main(String args) {for(int i = 1; i < 100; i += i)System.out.print(i + " ");}}

Код ASCII-символов нижнего регистра отличается от кода соответствующих символов верхнего регистра на величину 32. Следовательно, для преобразования строчнойбуквы в прописную нужно уменьшить ее код на 32. Используйте это обстоятельстводля написания программы, осуществляющей ввод символов с клавиатуры. При выводе результатов данная программа должна преобразовывать строчные буквы в прописные, а прописные - в строчные. Остальные символы не должны изменяться.Работа программы должна завершаться после того, как пользователь введет с клавиатуры точку. И наконец, сделайте так, чтобы программа отображала число символов,для которых был изменен регистр.// Смена регистра символов,class CaseChg {public static void main(String args)throws java.io.IOException {char ch;int changes = 0;System.out.println("Enter period to stop.");do {ch = (char) System.in.read();if(ch >= "a" & ch <= "z") {ch -= 32;changes++;System.out.println(ch);}else if(ch >= "A" & ch <= "Z") {ch += 32;changes++;System.out.println(ch);}} while(ch != ".");System.out.println("Case changes: " + changes);}}

Что такое бесконечный цикл?Бесконечным называется такой цикл, выполнение которого не оканчивается.

Должна ли метка, используемая вместе с оператором break, быть определена в кодовом блоке, содержащем этот оператор?Да, должна.Глава 4. Введение в классы, объекты и методы

В чем отличие класса от объекта?Класс - это абстрактное логическое описание формы и поведения объекта. А объект - это вещественный экземпляр класса.

Как определяется класс?Класс определяется с помощью ключевого слова class. В операторе class указываются код и данные, составляющие класс.

Чью собственную копию содержит каждый объект?Каждый объект класса содержит собственную копию переменных экземпляра этогокласса.

Покажите, как объявить объект counter класса MyCounter, используя два отдельных оператора.MyCounter counter;counter = new MyCounter();

Как должен быть объявлен метод myMeth, принимающий два параметра а и b типаint и возвращающий значение типа double?double myMeth(int a, int b) { // ...

Как должно завершаться выполнение метода, возвращающего некоторое значение?Для завершения метода служит оператор return. Он же передает возвращаемое значение вызывающей части программы.

Каким должно быть имя конструктора?Приложение А. Ответы на вопросы для самопроверки 563Имя конструктора должно совпадать с именем класса.

Какие действия выполняет оператор new?Оператор new выделяет память для объекта и выполняет инициализацию объекта,используя конструктор соответствующего класса.

Что такое “сборка мусора” и какие действия она выполняет? Зачем нужен методfinalize()?“Сборка мусора” - это механизм удаления неиспользуемых объектов для повторного использования памяти, освобождаемой от объектов. Метод finalize () вызывается для объекта непосредственно перед его удалением из памяти.

Что означает ключевое слово this?Ключевое слово this означает ссылку на объект, для которого вызывается метод.Она автоматически передается методу.

Пишет кто-то в растрепанных чувствах, "ни здрасте ни досвидания". :-))

Как заставить дизайнера нести ответственность за опечатки? У нашей компании к примеру есть дизайн студия, с которой постоянно сотрудничаем. И почти в каждом макете, который они для нас делают, встречаются опечатки. Некоторые из них мы делаем сами и сами же исправляем когда нам присылают макет на сверку, некоторые приходится исправлять по несколько раз - дизайнеры принимают кучу поправок, что-то исправляют, что-то забывают. А иногда новые опечатки возникают уже в готовой продукции, которую дизайн студия сама отправляет в печать. У студии нет своего корректора, но есть менеджеры, которые курируют проекты, есть арт директор, есть дизайнеры и вебмастера. Короче веселые и талантливые ребята, но уж очень неаккуратные. Вы - иллюстратор, и в вашем окружении много дизайнеров иллюстраторов и людей творческих профессий. Но разве творчество не предполагает аккуратность? Разве ответственность творца заканчивается на том, чтоб нарисовать картинку и приклеить к ней не-важно-какой-текст? Часто у вас возникают проблемы с опечатками и кто их должен решать - тот, кто делает макет или тот кто его заказывает? И что делаете вы, когда вам приносят нечто изготовленное с грубыми ошибками? Очень наболело.

Здравствуйте!
Безусловно я думаю, что каждый человек должен делать ВСЮ свою работу очень хорошо. Но так же я знаю, что очень часто иллюстраторы, дизайнеры и прочие люди, "собирающие контент во что-то" делают ошибки, не потому что они такие лентяи и халатные личности. А потому что это особенность их работы - они настроены на картинки, макет и оформление, и не думают об ошибках и опечатках. Чтобы проверить ошибки, нужно сознательно, и немалым усилием, переключить мозги именно на читание текста и вдумывание в него. И даже в этом случае можно много всего напропускать, потому что при работе с текстом, как с графикой, глаз замыливается каким-то особым способом.

Какие из этого есть выходы?
1 - Полностью запретить дизайнерам (и отучать их от этого) вообще трогать текст. Вот совсем. дали текст, как есть - вот с ним работаем. Ничего не дописываем, не приписываем. не исправляем. не списываем вручную с картинки, и.т.д. И приучить, что. если приходится самому исправить хоть одно слово, или даже часть слова - это всегда ситуация особой боевой готовности - надо тогда сто раз перечитать, перепроверить, и (!!!) все равно при этом не забыть сообщить менеджеру, что где-то правил текст.

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

Я давно себя приучила отдавать корректору или редактору (или менеджеру проекта) ВСЕ, где я что-то писала. Все. Правда все. Каждую картинку, на которой ровно три слова. Потому что и там бывает. И говорить об этом, если я где-то тексты меняла. Тоже всем. Чтобы все еще раз посмотрели. мне не стыдно. Я знаю, что тупые опечатки в упор не вижу. Гораздо стыднее, когда 2000 экземпляров напечатанных на дорогом материале придут с ошибкой.

2 - Всем менеджерам говорить - громко и понятно - что вашим дизайнерам запрещено лезть в текст и менять там хоть одну букву, и вот точно как пришлют, так они на место и поставят. И если там будет ошибка, то это будет ошибка менеджера. Это задача менеджера решить, кто проверяет ошибки - он сам, или другой менеждер, или журналист, которому поручили, или редактор или корректор. И все время тыкать носом - это ВАША задача, ваша. Дизайнер тут не при чем, иллюстратор не при чем, хорошо, если они лишний раз посмотрят и заметят, но это не их задача и не их ответственность. Это менеджер должен, после последнего, предпоследнего и тридесятого переделывания еще раз посмотреть все, и сообщить дизайнеру, сли там еще букву пропустили, и тут спецсимвол вылез.

3 - Вообще раньше была такая традиция: если что-то выдается большим тиражом (от 200) существует "сигналка" - одна последняя окончательная версия. которую дают почитать и посмотреть нескольким людям. При тираже тысяч в 10, людей должно быть примерно столько же - 8-10. При более маленьком тираже - все равно минимум трое. Они должны очень старательно прочитать, и расписаться, что читали. Если после них еще будет ошибка, хотя бы будет пара человек, которые это видели и которых можно будет спросить - как они втроем просмотрели? Так же, если эти трое пару раз "опозорятся", они потом сами тоже активно примут участие в пихании тех, кто изначально должен был эти опечатки не пропустить. Надо на кого-то взвалить ответственность за это - и спрашивать. Тогда будут стараться не допускать.
А сейчас, судя по описанию, ответственным себя не чувствует никто.

Много начинающих верстальщиков и веб-разработчиков сталкиваются с ситуацией, когда элементы на странице ведут себя не так, как ожидается, и данное поведение кажется абсурдным. Но не стоит забывать, что существующие доминирующие технологии созданные людьми думающими, а если эта технология ещё и проверенная временем, значит, в таком странном, на первый взгляд, поведении, была и остается необходимость.

Наверное, каждый сталкивался со свойством border-collapse для таблиц. Известно, что данное свойство со значением border-collapse:collapse удаляет одну из границ для соседних ячеек таблицы, предотвращая дублирование их границ. Схоже работает и особенность блочной модели, называемая схлопыванием внешних отступов (англ. - Collapsing Margin). Схлопывание внешних отступов - особенность блочной модели CSS, которая заключается в наложении вертикальных внешних отступов двух или более блочных элементов (которые могут быть или не быть соседями) для формирования одиночного внешнего отступа. Отступ, сформировавшийся в результате данного объединения, называется схлопнувшимся отступом. Заметьте, что данная особенность применима только к вертикальным отступам элемента, т.е. к margin-top и margin-bottom .

Для упрощения, представляйте схлопывание следующим образом: когда внешние вертикальные отступы блочных элементов соприкасаются, то остается отступ, значение которого равняется значению большего из них, при этом значение отступа элемента с меньшей границей равно нулю. На рисунке ниже размер одной клетки фонового рисунка равен 20 пикселей; как видим, отступ между элементами равен 40 пикселей, хотя на первый взгляд, глядя на код, человеку, не знакомому с принципами схлопывания, может показаться, что блоки размещены неправильно, так как их отступы не плюсуются:

#block1 { margin:40px; /*Задаем для первого блока отступы со всех сторон 40 пикселей */ } #block2 { margin:40px; /*Задаем для второго блока отступы аналогично первому */ margin-top:20px; /* Переопределяем верхний отступ */ }
*Исходный код примера

В случае, если одна с величин имеет минусовое значение, то финальное значение схлопнувшегося отступа формируется путем суммирования исходных значений блочных элементов. В случае, если обе величины отрицательные, то используется большее отрицательное значение (меньшее с арифметической точки зрения). Например, если бы block1 имел значение margin-bottom:-60px , а блок block2 margin-top:50px , то финальное значение отступа между элементами было бы минус 10 пикселей.

Как и в любой другой концепции, здесь тоже бывают исключения, поэтому схлопывание не работает в следующих случаях:

  • с «плавающими» блоками, которые используют свойство float ;
  • с корневыми элементами(html , body );
  • с абсолютно позиционируемыми элементами, имеющих свойство и значение position:absolute ;
  • в строчных элементах.
Существуют также специфические исключения, применяемые в зависимости от того, в каком иерархическом взаимодействии находятся блоки (об этом ниже):
  • Если элементы имеют значение свойства overflow , отличимое от visible , то в таких элементах не схлопываются отступы с отступами их наследников.
  • Элементы со свойством cleared не схлопываются верхними отступами с нижними отступами их родителей.
Теория может быть сложна для понимания, поэтому перейдем к примерам. Рассмотрим классические случаи, существующие в наследовании: когда блоки имеют связь потомок-потомок (sibling-sibling ), элементы соседствуют друг с другом и имеют общего родителя; а также когда блоки имеют связь родитель-потомок (parent-child ) - один элемент вложенный в другой. В обоих случаях схлопывание успешно применяется, но имеет несколько нюансов, о которых стоит поговорить.

Соседние элементы и схлопывание

Обычно, исключая применения дополнительных свойств, внешние отступы любых соседних не корневых блочных элементов схлопываются, пример схлопывания соседних элементов приведен выше.

Иногда требуется избежать данного эффекта. Кроме применения свойств, перекрывающих схлопывание, можно использовать некоторые хитрости, например, не задавать элементам значения отступа, кроме единого отступа - сверху или снизу, но если таким образом задать значения ряду элементов, может возникнуть потребность в уточнении отступов для первого или последнего элемента относительно родительского, или же менять его поле:

#parent { margin: 40px; border:1px dashed white; background:rgba(150, 0, 255, 0.2); width:204px; } /* Для визуальной симметрии потребовалось бы добавить padding-bottom:20px; */ .block { height:16px; margin-top: 20px; border:2px solid white; background:rgba(150, 0, 255, 0.7); }
*Исходный код примера

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

Схлопывание отступов элементов, связанных родительской связью

В данном случае схлопывание работает немного запутаннее и сложнее, чем в примерах выше. Для начала нужно знать, что отсупы блоков схлопываются соответствующими полями. Это значит, что верхнее поле родителя схлопнется с верхним полем своего потомка. Для рассмотрения данной ситуации представим, что имеется три блока: внешний блок-родитель, блок-родитель и дочерний блок. Для того, чтобы сработало схлопывание, нужно что бы блок-родитель не имел ни полей, ни границ (их значения были нулевые). Таким образом, внешние поля этих элементов соприкасаются. Заметьте, что нулевые значения внутренних полей и границ для родителей - обязательное условие срабатывания схлопывания.

Outside_parent { margin-top:40px; margin-left: 40px; border:2px dotted black; background:rgba(150, 0, 255, 0.7); } .parent { padding:0px; /* Обратите внимание что внутренние отступы равны 0 */ border:0px solid grey; /* Полей у родителя так же не должно быть */ margin-top: 40px; /* Этот отступ схлопнулся с дочерним */ background:rgba(150, 0, 255, 0.7); } .daughter { width: 196px; margin-top:60px; /* Актуальное значения отступа */ border:2px solid white; }
*Исходный код примера

Напомню, что размер одной клетки равно 20 пикселей, поэтому без схлопывания отступ между элементами был бы 60+40 пикселей, но из-за применения данного эффект он равен максимальному значению одного из элементов, в данному случае - 60 пикселям(3 клетки). Видим, что отступ дочернего блока заменяет верхний отступ для своего родителя. Если для родительского элемента задать что-либо: поле (padding ) или же границу (border ), то схлопывание не применится и расстояние между первым блоком и вторым будет очевидные 100 пикселей. Таким способом, можно управлять наличием данного эффекта, добавляя маленькое поле, либо же бесцветную границу, допустим, толщиной 1 пиксель, тем самым отключая эффект схлопывания.
На первый взгляд может показаться, что эфект работает только при формировании структуры как в примере выше, но это не так: схлопывание сработает и между соседними элементами, когда у них вложенные другие блоки. Рассмотрим ситуацию, когда имеется внешний блок и два блока, один с которых вложенный в другой.

Outside { height:16px; margin: 20px 0 0 40px; border:2px solid white; background:rgba(150, 0, 255, 0.7); margin-bottom:20px; /* Этот отступ так же схлопнулся */ } .parent { margin-top:40px; /* Этот отступ схлопнулся с дочерним */ margin-left:40px; } /* Родительский блок не должен иметь ни полей ни границ для срабатывания эффекта */ .daughter { margin-top:60px; /* Актуальный схлопнувшийся отсуп */ border:2px solid white; }
*Исходный код примера

Примечательно, что схлопывание в примере выше сработало два раза: сначала схлопнулись отступы родительского и дочернего элемента, потом сформировавшийся отступ схлопнулся с нижним отступом внешнего элемента.

Вывод

Для хорошего специалиста важно контролировать все надлежащие ему инструменты и атрибуты: хорошего механика волнует не только количество клапанов в двигателе, но и наличие хорошей системы впрыска топлива и качество самого топлива. Так и хороший веб-разработчик должен контролировать каждый пиксель и не терять важные детали в структуре сайта.

Дьявол в мелочах, дьявол в пикселях.

Теги: Добавить метки

Похожие публикации