среда, 30 января 2019 г.

6 Как выглядят циклы в Java

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


   Повторяемый фрагмент кода называют телом цикла.
   Одно выполнение тела цикла называют итерацией.

   Циклы можно вкладывать один в другой, при этом число повторов наружного и вложенных циклов умножается.


   Виды циклов:

   Безусловные (бесконечные) циклы

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

   На Java выглядит так:
   К примеру, достаточно не указывать параметры в for:
for (; ;) {
}


   Цикл с предусловием

   (Цикл While)(Цикл Пока)
   «Пока истинно условие – выполнять цикл»
   Цикл while проверяет истинность некоторого условия до выполнения тела цикла, и если условие истинно, то код цикла выполняется.
   Если условие с самого начала ложно, то тело цикла выполнено не будет.


   На Java выглядит так:
int х = 1;
while (х < 3) {
     System.out.println(х);
     х++; //увеличивает х на единицу
}
 

   Цикл с постусловием

   (Цикл Do While)(Цикл До)
   «Делать, пока не выполнится условие»
   Сначала выполняет один раз тело цикла, затем проверяет условие и, если оно истинно, повторяет цикл.
   На Java выглядит так:
int х = 3;
do{
    System.out.println(j);
    х--;
}while (х > 0);


Циклы с выходом из середины
(break, continue, return)
 
   Синтаксически такой цикл оформляется с помощью трёх конструкций: начала цикла, конца цикла и команды выхода из цикла.
   Внутри тела должна присутствовать команда выхода из цикла, при выполнении которой цикл заканчивается и управление передаётся на оператор, следующий за конструкцией конца цикла.
   Часть тела цикла с выходом из середины, расположенная после начала цикла и до команды выхода, выполняется всегда, а часть тела цикла, находящаяся после команды выхода, не выполняется при последней итерации.

   Команда break переключает программу на выполнение следующих за циклом операторов.
   Если использовать break во вложенном цикле, прервётся только он, а внешний продолжит выполняться.
   Например:
int[] nums = new int[] { 1, 2, 3, 4, 12, 9 };
for (int i = 0; i < nums.length; i++){
    if (nums[i] > 10) {
        break;
    System.out.println(nums[i]);
}
   Так как в цикле идет проверка, больше ли элемент массива 10, то мы не увидим на консоли последние два элемента, так как когда nums[i] окажется больше 10 (то есть равно 12), сработает оператор break, и цикл завершится.
   Правда, мы также не увидим и последнего элемента, который меньше 10.

   Оператор continue заставляет цикл пропустить оставшуюся часть его тела, возвращая его к начальному условию. При соблюдении заданного условия continue досрочно прерывает итерацию цикла for (если программа доходит до него, она пропускает невыполненную часть итерации, обновляет счётчик и переходит к следующей итерации) или же возвращает к проверке условия продолжения цикла while.
   Задача: сделать так, чтобы при числах больше 10, цикл не завершался, а просто переходил к следующему элементу.
int[] nums = new int[] { 1, 2, 3, 4, 12, 9 };
for (int i = 0; i < nums.length; i++){    
               if (nums[i] > 10)
        continue;
    System.out.println(nums[i]);
}
   В этом случае, когда выполнение цикла дойдет до числа 12, которое не удовлетворяет условию проверки, то программа просто пропустит это число и перейдет к следующему элементу массива.

   Оператор return возвращает программу к месту, откуда был вызван метод, в котором цикл находится (заканчивает выполнение метода).

   *continue, и break можно использовать с меткой для перехода к нужной части кода - по аналогии с goto:
   break Mark1; //при условии, что где-то выше стоит метка Mark1 :



   For - Цикл со счётчиком (или цикл Для)

   Выполняется, при каждой итерации обновляя счётчик, пока условие в объявлении цикла истинно (возвращает true).

   На Java выглядит так:
for ([инициализация счетчика]; [условие]; [изменение счетчика])
{
    // действия
}

Пример:
 
for (int i = 1; i < 9; i++){
    System.out.println(i);
}
   (Данный цикл выведет на экран восемь строк со значениями переменной i) 

   Либо можно опустить ряд блоков, создав счётчик вне цикла:
int i = 1;
for (; i<9;){
    System.out.println(i);
               i++;
}

   Цикл for может определять сразу несколько переменных и управлять ими:
int n = 10;
for(int i=0, j = n - 1; i < j; i++, j--){                     
               System.out.println(i * j);
}

   сокращенный for (в других языках известен как foreach) – перебирает массив от первого элемента до последнего и на каждой итерации выполняет тело цикла.
   Во многих языках существует более компактная форма for для перебора элементов массивов - foreach. Конструкция foreach не требует ручного изменения переменной-шага для перебора - цикл автоматически выполняет эту работу.
   В Java решили не добавлять новое ключевое слово, а просто сделали усовершенствованный вид цикла for, который имеет вид:
for(тип итер_пер : коллекция) блок_операторов

   Сокращенный вариант цикла for не содержит указаний ни на число повторов, ни на действия в конце шага. От первого элемента нужно переходить к следующему – пока массив не кончится.
int[] ms = { 1, 2, 3, 4}; //создаем массив
int s = 0;
for(int i : ms) { //указываем, что перебирать
    s *= i; //последовательно перемножаем элементы
}
System.out.println(s);


Цикл с меткой (Labelled Loop)

   Java позволяет прикреплять метку (Label) циклу.
   Таким образом циклу даётся «имя», что полезно когда, например, используется несколько циклов в одной программе.
   Вариант 1: используя команду break labelX.
   Вариант 2: используя команду ​​​​​ continue labelX.

Не без использования:

https://o7planning.org/ru/11563/loops-in-java#a12405709

вторник, 15 января 2019 г.

5 Программа Hello world на JAVA. Подробный разбор


К примеру, разберём код вывода сообщения:

public class Fun {
    public static void main(String[] args) {
        // Следующая инструкция выведет нам французское приветствие
        System.out.println("Cou cou");
    }
}

   Итак, разберем написанный код, который состоит из зарезервированных для программирования лексем, знаков препинания и  введённых нами значений.

    Строка 1
   В ней определили публичный (public) класс (class), который назвали Fun. В связи с этим класс, в котором мы его объявим должен называться Fun.java

   Строка 2
   В ней определили метод. В данном случае это публичный (public) статичный (static) пустой (void - не выдает в результате никаких значений) главный (main - с него начинается выполнение программы - точка входа) метод (конструкция, которая содержит инструкции).
   В данном случае мы использовали инструкцию System.out.println - данная инструкция говорит о том, что "Система должна вывести на печать значение, заключенное в скобках". Кавычки означают то, что заключенный в них текст должен выводится как есть, как текст, а не переменная.
   После инструкции мы поставили точку с запятой ; , которые служат разделителем между инструкциями.

    Строка 3
   В этой строке после // мы оставили комментарий о том, что сделали ниже. За этими слэшами хоть анекдоты пиши. Комментарии могут располагаться между /* и */ на одной или нескольких строках или на одной строке после //.

   Фигурные скобки обозначают границы описания метода и границы описания класса.


Наследование в Java

   «родительское/дочернее»     Наследование (inheritance) - свойство системы, позволяющее описать (создать) новый класс на основе уже су...