<!DOCTYPE html>
<html class="h-100" data-bs-theme="light" data-mantine-color-scheme="light" lang="ru" prefix="og: https://ogp.me/ns#">
<head>
<meta content="width=device-width, initial-scale=1.0" name="viewport">
<meta content="IE=Edge" http-equiv="X-UA-Compatible">
<link crossorigin="true" href="https://cdn.hexlet.io" rel="preconnect">
<link href="https://mc.yandex.ru" rel="preconnect">
<meta content="aa2vrdtq64dub8knuf83lwywit311w" name="facebook-domain-verification">
<link href="/favicon.ico" rel="icon" sizes="any">
<link href="/favicon.svg" rel="icon" type="image/svg+xml">
<link href="/apple-touch-icon.png" rel="apple-touch-icon">
<link href="/manifest.webmanifest" rel="manifest">
<script>
//<![CDATA[
window.gon={};gon.ym_counter="25559621";gon.is_bot=true;gon.applications={};gon.current_user={"id":null,"last_viewed_notification_id":null,"email":null,"state":null,"first_name":"","last_name":"","created_at":"2026-02-26 17:11:50 UTC","current_program":null,"current_team":null,"full_name":"","guest":true,"can_use_paid_features":false,"is_hexlet_employee":false,"sanitized_phone_number":"","can_subscribe":true,"can_renew_education":false};gon.token="xav3RPjADdfZQvBLsUqjssS6NvBSzsLEDRw1WU4rGfcqejxzCr6gt28B1NO9RVPFBLMbWlr5PGaw_K8NHCz-mQ";gon.locale="ru";gon.language="ru";gon.theme="light";gon.rails_env="production";gon.mobile=false;gon.google={"analytics_key":"UA-1360700-51","optimize_key":"GTM-5QDVFPF"};gon.captcha={"google_v3_site_key":"6LenGbgZAAAAAM7HbrDbn5JlizCSzPcS767c9vaY","yandex_site_key":"ysc1_Vyob5ZPPUdPBsu0ykt8bVFdzsfpoVjQChLGl2b4g19647a89","verification_failed":null};gon.social_signin=false;gon.typoreporter_google_form_id="1FAIpQLSeibfGq-KvWQ2Fyru-zkFFRVTLBuzXAHAoEyN1p49FtDmNoNA";
//]]>
</script>
<meta charset="utf-8">
<title>Модуль 4. Урок 3. Циклы в Java. | Введение в Java</title>
<meta name="description" content="Модуль 4. Урок 3. Циклы в Java. / Введение в Java: Получить знания о том, что такое циклы и как их использовать на практике на примере языка Java.">
<link rel="canonical" href="https://ru.hexlet.io/courses/java_101/lessons/loops_in_java/theory_unit">
<meta name="robots" content="noarchive">
<meta property="og:title" content="Модуль 4. Урок 3. Циклы в Java.">
<meta property="og:title" content="Введение в Java">
<meta property="og:description" content="Модуль 4. Урок 3. Циклы в Java. / Введение в Java: Получить знания о том, что такое циклы и как их использовать на практике на примере языка Java.">
<meta property="og:url" content="https://ru.hexlet.io/courses/java_101/lessons/loops_in_java/theory_unit">
<meta name="csrf-param" content="authenticity_token" />
<meta name="csrf-token" content="mup_ZWmenf_dJxeJCQq-axDsb_Sm5fWax138U7l7fU11O7RSm-Awn2tkMxEFBU4c0OVCXq7SCzh6vWYH63yaIw" />
<script src="/vite/assets/inertia-INZxX8jp.js" crossorigin="anonymous" type="module"></script><link rel="modulepreload" href="/vite/assets/chunk-DsPFFUou.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/preload-helper-BJ4cLWpC.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/init-nkZBEvfU.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/ahoy-DrlRQ-1D.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/analytics-6pOtQ3OW.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/ErrorFallbackBlock-naDSYSy9.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Surface-DL2bpZA-.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/gon-D3e4yh1x.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/mantine-CGMYrt2Y.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/utils-DRqSHbQE.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/routes-CCH8ilKF.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/extends-C-EagtpE.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/inheritsLoose-BBd-DCVI.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/objectWithoutPropertiesLoose-DRHXDhjp.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/index.esm-DAqKOkZ0.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Button-CGPUux8l.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/CloseButton-D1euiPao.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Group-BX48WcuU.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Loader-BQEY8g6v.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Modal-Cy3HByv7.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/OptionalPortal-1Hza5P2w.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Stack-CtjJzfw4.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Textarea-Ck64llAy.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Box-B5-OOzBf.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/DirectionProvider-Dc9zdUke.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/events-DJQOhap0.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/use-reduced-motion-D2owz4wa.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/use-disclosure-zKtK5W1r.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/use-hotkeys-Cnc_Rwkb.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/random-id-DOQyszCZ.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/notifications.store-C-3AFSMn.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/exports-C_MrNx_T.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/axios-BEvgo0ym.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/dayjs.min-BkKovM-s.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/i18next-BlSq9s7B.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/client-U9M77rxp.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/react-dom-DaLxUz_h.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/useTranslation-Bx1Cdrkz.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/compiler-runtime-6XxiPFnt.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/jsx-runtime-CwjcCKJi.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/react-CkL4ZRHB.js" as="script" crossorigin="anonymous">
<link rel="stylesheet" href="/vite/assets/application-BqhCP46M.js" />
<script src="/vite/assets/application-Df9RExpe.js" crossorigin="anonymous" type="module"></script><link rel="modulepreload" href="/vite/assets/chunk-DsPFFUou.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/autocomplete-VMNbxKGl.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/routes-CCH8ilKF.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/createPopper-C3aM9r1M.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/js.cookie-D1-O8zkX.js" as="script" crossorigin="anonymous"><link rel="stylesheet" href="/vite/assets/application-C8HjmMaq.css" media="screen" />
<script>
window.ym = function(){(ym.a=ym.a||[]).push(arguments)};
window.addEventListener('load', function() {
setTimeout(function() {
ym.l = 1*new Date();
ym(window.gon.ym_counter, "init", {
clickmap: true,
trackLinks: true,
accurateTrackBounce: true,
webvisor: true
});
// Загружаем скрипт
var k = document.createElement('script');
k.async = 1;
k.src = 'https://mc.yandex.ru/metrika/tag.js';
document.head.appendChild(k);
ym(window.gon.ym_counter, 'getClientID', function(clientID) {
window.ymClientId = clientID;
});
}, 1500);
});
</script>
<!-- Google Tag Manager - deferred -->
<script>
// dataLayer stub сразу — пуши работают до загрузки скрипта
window.dataLayer = window.dataLayer || [];
// Сам скрипт — отложенно после load
window.addEventListener('load', function() {
setTimeout(function() {
dataLayer.push({'gtm.start': new Date().getTime(), event: 'gtm.js'});
var j = document.createElement('script');
j.async = true;
j.src = 'https://www.googletagmanager.com/gtm.js?id=GTM-WK88TH';
document.head.appendChild(j);
}, 1500);
});
</script>
<!-- End Google Tag Manager -->
</head>
<body>
<noscript>
<div>
<img alt="" src="https://mc.yandex.ru/watch/25559621" style="position:absolute; left:-9999px;">
</div>
</noscript>
<header class="sticky-top bg-body">
<nav class="navbar navbar-expand-lg">
<div class="container-xxl">
<a class="navbar-brand" href="/"><img alt="Логотип Хекслета" height="24" src="https://ru.hexlet.io/vite/assets/logo_ru_light-BpiEA1LT.svg" width="96">
</a><button aria-controls="collapsable" aria-expanded="false" aria-label="Меню" class="navbar-toggler border-0 mb-0 mt-1" data-bs-target="#collapsable" data-bs-toggle="collapse">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="collapsable">
<ul class="navbar-nav mb-lg-0 mt-lg-1">
<li class="nav-item dropdown">
<button aria-haspopup class="btn nav-link" data-bs-toggle="dropdown" type="button">
Все курсы
<span class="bi bi-chevron-down align-middle ms-1"></span>
</button>
<ul class="dropdown-menu">
<li>
<a class="dropdown-item d-flex py-2" href="/courses"><div class="fw-bold me-auto">Все что есть</div>
<div class="text-muted">117</div>
</a></li>
<li>
<hr class="dropdown-divider">
</li>
<li class="dropdown-item">
<b>Популярные категории</b>
</li>
<li>
<a class="dropdown-item py-2" href="/courses_devops">Курсы по DevOps
</a></li>
<li>
<a class="dropdown-item py-2" href="/courses_data_analytics">Курсы по аналитике данных
</a></li>
<li>
<a class="dropdown-item py-2" href="/courses_programming">Курсы по программированию
</a></li>
<li>
<a class="dropdown-item py-2" href="/courses_testing">Курсы по тестированию
</a></li>
<li>
<hr class="dropdown-divider">
</li>
<li class="dropdown-item">
<b>Популярные курсы</b>
</li>
<li>
<a class="dropdown-item py-2" href="/programs/devops-engineer-from-scratch">DevOps-инженер с нуля
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/go">Go-разработчик
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/java">Java-разработчик
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/python">Python-разработчик
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/qa-auto-engineer-java">Автоматизатор тестирования на Java
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/data-analytics">Аналитик данных
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/frontend">Фронтенд-разработчик
</a></li>
</ul>
</li>
<li class="nav-item dropdown">
<button aria-haspopup class="btn nav-link" data-bs-toggle="dropdown" type="button">
О Хекслете
<span class="bi bi-chevron-down align-middle"></span>
</button>
<ul class="dropdown-menu bg-body">
<li>
<a class="dropdown-item py-2" href="/pages/about">О нас
</a></li>
<li>
<a class="dropdown-item py-2" href="/blog">Блог
</a></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://special.hexlet.io/hse-research" role="button">Результаты (Исследование)
</span></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://career.hexlet.io" role="button">Хекслет Карьера
</span></li>
<li>
<a class="dropdown-item py-2" href="/testimonials">Отзывы студентов
</a></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://t.me/hexlet_help_bot" role="button">Поддержка (В ТГ)
</span></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://special.hexlet.io/referal-program/?promo_creative=priglasite-druzei&promo_name=referal-program&promo_position=promo_position&promo_start=010724&promo_type=link" role="button">Реферальная программа
</span></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://special.hexlet.io/certificate" role="button">Подарочные сертификаты
</span></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://hh.ru/employer/4307094" role="button">Вакансии
</span></li>
<li>
<span class="dropdown-item d-flex external-link" rel="noopener noreferrer nofollow" data-href="https://b2b.hexlet.io" data-target="_blank" role="button">Компаниям
</span></li>
<li>
<span class="dropdown-item d-flex external-link" rel="noopener noreferrer nofollow" data-href="https://hexly.ru/" data-target="_blank" role="button">Колледж
</span></li>
<li>
<span class="dropdown-item d-flex external-link" rel="noopener noreferrer nofollow" data-href="https://hexlyschool.ru/" data-target="_blank" role="button">Частная школа
</span></li>
</ul>
</li>
<li><a class="nav-link" href="/subscription/new">Подписка</a></li>
</ul>
<ul class="navbar-nav flex-lg-row align-items-lg-center gap-2 ms-auto">
<li>
<a class="nav-link" aria-label="Переключить тему" href="/theme/switch?new_theme=dark"><span aria-hidden="true" class="bi bi-moon"></span>
</a></li>
<li>
<span data-target="_self" class="nav-link external-link" data-href="/u/new" role="button"><span>Регистрация</span>
</span></li>
<li>
<span data-target="_self" class="nav-link external-link" data-href="https://ru.hexlet.io/session/new" role="button"><span>Вход</span>
</span></li>
</ul>
</div>
</div>
</nav>
</header>
<div class="x-container-xxxl">
</div>
<main class="mb-6 min-vh-100 h-100">
<div id="app" data-page="{"component":"web/courses/lessons/theory_unit","props":{"errors":{},"locale":"ru","language":"ru","httpsHost":"https://ru.hexlet.io","host":"ru.hexlet.io","colorScheme":"light","auth":{"user":{"id":null,"last_viewed_notification_id":null,"email":null,"state":null,"first_name":"","last_name":"","created_at":"2026-02-26T17:11:50.662Z","current_program":null,"current_team":null,"full_name":"","guest":true,"can_use_paid_features":false,"is_hexlet_employee":false,"sanitized_phone_number":"","can_subscribe":true,"can_renew_education":false}},"cloudflareTurnstileSiteKey":"0x4AAAAAAA15KmeFXzd2H0Xo","vkIdClientId":"51586979","yandexIdClientId":"88d071f1d3384eb4bd1deb37910235c7","formAuthToken":"YVWaZzOnmZNMsjBaW0nUC2AzIwRNnfu-iPps54t22BqOhFFQwdk08_rxFMJXRiR8oDoOrkWqBRw1Gvaz2XE_dA","topics":[{"id":4167,"title":"А почему не работает так ?\nfinal String figure = field.figures[i][i2];","plain_title":"А почему не работает так ? final String figure = field.figures[i][i2]; ","creator":{"public_name":"Евгений Крекотень","id":109480,"is_tutor":false},"comments":[{"creator":{"public_name":"Вячеслав Ковалевский","id":5,"is_tutor":false},"id":7344,"body":"А что именно не работает? С точки зрения синтаксиса все вроде бы верно.","topic_id":4167}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Модуль 4. Урок 3. Циклы в Java.","entity_url":null,"active":true}},{"id":4396,"title":"А почему в решении учителя нет фигурных скобок после первого for?","plain_title":"А почему в решении учителя нет фигурных скобок после первого for? ","creator":{"public_name":"Valentin Bagadin","id":111282,"is_tutor":false},"comments":[{"creator":{"public_name":"Вячеслав Ковалевский","id":5,"is_tutor":false},"id":7713,"body":"Если тело цикла всего одна строка то фигурные скобки можно опустить. Правда это не рекомендованный стиль написания.","topic_id":4396}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Модуль 4. Урок 3. Циклы в Java.","entity_url":null,"active":true}},{"id":2345,"title":"**Не могу понять правильный ответ из теста:**\nЧто можно дописать в данном цикле, чтобы его тело исполнилось ровно четыре раза?\nint i = 1;\nwhile (/* */) {\n i = i + 10; \n}\n**По мне так i<=41, но ответ не верный. Кому не трудно, прошу объяснить. Не просто написать ответ, а объяснить почему. Спасибо.** ","plain_title":"Не могу понять правильный ответ из теста: Что можно дописать в данном цикле, чтобы его тело исполнилось ровно четыре раза? int i = 1; while (/* /) { i = i + 10; } *По мне так i<=41, но ответ не верный. Кому не трудно, прошу объяснить. Не просто написать ответ, а объяснить почему. Спасибо.** ","creator":{"public_name":"Виталий Кузовлев","id":71394,"is_tutor":false},"comments":[{"creator":{"public_name":"Виталий Кузовлев","id":71394,"is_tutor":false},"id":3848,"body":"Если ставить строгое неравенство i<41, также выдает, что ответ неверный. Правильный ответ получается, когда отмечается два варианта i<41 и i!=41. Теперь понятно, i меньше и не равно 41. Я получается просто изначально не учел, что тело цикла исполнилось и при 1 и соответственно необходимо было исключить 41. ","topic_id":2345},{"creator":{"public_name":"Oleg Sinyak","id":84954,"is_tutor":false},"id":3847,"body":"Виталий, при твоем условии i <= 41 тело цикла отработет 5 раз(для i = 1,11,21,31,41). Используй строгое неравенство i < 41.","topic_id":2345},{"creator":{"public_name":"Алексей","id":87225,"is_tutor":false},"id":3917,"body":"Чего так мудрите? Не проще написать i<32","topic_id":2345}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Модуль 4. Урок 3. Циклы в Java.","entity_url":null,"active":true}},{"id":45353,"title":"Добрый день! Застопорилась на проверке пустого поля, т.е. начальное состояние в игре. https://ru.hexlet.io/code_reviews/292475\nПри вызове метода getFigure у объекта Field возникает ошибка NullPointerException. В предыдущей практике при такой проверке исключения не было. Можно ли направить меня в нужное русло? Спасибо","plain_title":"Добрый день! Застопорилась на проверке пустого поля, т.е. начальное состояние в игре. https://ru.hexlet.io/code_reviews/292475 При вызове метода getFigure у объекта Field возникает ошибка NullPointerException. В предыдущей практике при такой проверке исключения не было. Можно ли направить меня в нужное русло? Спасибо ","creator":{"public_name":"Анастасия Москалец","id":274947,"is_tutor":false},"comments":[{"creator":{"public_name":"Сергей Алексеенко","id":102837,"is_tutor":false},"id":98132,"body":"Добрый день.\n\n> нельзя ведь написать проверку?\n> \n> Code (possible spoiler)\n> if (field == null)\n\nМожно и нужно. Вы еще не попробовали этот вариант?\n\n> поскольку field проинициализирован и ему не присвоен null. \n\nА при каждом ли вызове метода `currentMove` в него передают объект, а не `null`?\n\n\n> я исправила свои ошибки Линтера, и добавила вспомогательный метод isEmptyField (поле пустое? без фигурок?)\n\nКласс, код теперь ровный и шелковистый. :)\n\n\n> Тогда почему в классе MoveController.java имеет место быть такое условие, без NullPointerException\n> \n> Code (possible spoiler)\n> if (field.getFigure(point) != null) {\n> return false;\n> }\n\nПросто любитель пихать `null`ы в методы еще не добрался до `MoveController`.\n\nКод, который Вы пишете, должен предусматривать все варианты его использования, согласно синтаксиса языка. Это является элементом качества кода. Чем более независимый код от внешних условий тем меньше его придется редактировать.\nВедь никто не может гарантировать, что пользователь (программист) потратит свое время и разберется в деталях кода, который он переиспользует. Например, можно ли передавать `null` в метод, как в данном случае. \n\n\nВопрос проверок и исключений будет вскользь проходить через все темы куса. Но более широко будет рассмотрен в \"Модуль 9. Урок 1. Исключения в Java.\".","topic_id":45353},{"creator":{"public_name":"Сергей Алексеенко","id":102837,"is_tutor":false},"id":98054,"body":"Здравствуйте.\n\nЗдесь проверка пустым полем немножко другая, в сравнении с предыдущим упражнением. Тут скорее проверка отсутствующим полем.\n\nПодсказка: если у `null` попытаться вызвать метод или вообще обратиться к нему как к объекту, то получим `NullPointerException`.\n\nP.S. Это упражнение приведено в соответствие с требованиями линтера. Приведите и свою часть кода к этому соответствию. Во вкладке Linter ту должно быть ошибок.","topic_id":45353},{"creator":{"public_name":"Анастасия Москалец","id":274947,"is_tutor":false},"id":98119,"body":"> Подсказка: если у null попытаться вызвать метод или вообще обратиться к нему как к объекту, то получим NullPointerException.\n\nИсходя из моей проблемы я уже это поняла и без вашей подсказки.\n\n> проверка отсутствующим полем.\n\nнельзя ведь написать проверку?\n```\n if(field == null)\n```\nпоскольку field проинициализирован и ему не присвоен null. \nВ новой версии https://ru.hexlet.io/code_reviews/292475 я исправила свои ошибки Линтера, и добавила вспомогательный метод isEmptyField (поле пустое? без фигурок?), \nно java всё равно выкидывает мне NullPointerException на условие \n```\nif(field.getFigure(point) != null)\n```\nТогда почему в классе MoveController.java имеет место быть такое условие, без NullPointerException \n```\nif (field.getFigure(point) != null) {\n return false;\n }\n```\n","topic_id":45353}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Модуль 4. Урок 3. Циклы в Java.","entity_url":null,"active":true}},{"id":47030,"title":"Добрый вечер.\n\nХочу разобраться в этом тесте. \n\n```java\npublic static void main(String args[]) {\n\n int numb[] = { 1, 2, 3, 4, 5 };\n int sum = 0;\n for(int i = 2; i < 5; i = i + 1) {\n sum += numb[i];\n }\n System.out.println(\"Sum = \" + sum);\n}\n```\n\n0) Объявили массив - { 1, 2, 3, 4, 5 };\n1) Значение суммы равно 0 - int sum = 0;\n2) Цикл for в котором i = 2,\n\n(i < 5) - i не должно быть больше 5 (Автор в видео почему то сказал что и РАВНО 5, может быть я его не правильно понял.\n\n(i = i + 1) - условие, которое не дойдёт до максимума значения i < 5. То бишь 4 < 5.\n\nУ меня ход мыслей правильный? \n\nДальше я не могу понять, что происходит. Догадываюсь, но не могу грамотно объяснить даже, соответственно нельзя сказать, что я понимаю :/\n\nОбъясните пожалуйста.\n\n\n\n\n\n","plain_title":"Добрый вечер. Хочу разобраться в этом тесте. public static void main(String args[]) { int numb[] = { 1, 2, 3, 4, 5 }; int sum = 0; for(int i = 2; i < 5; i = i + 1){ sum += numb[i]; } System.out.println(\"Sum=\" + sum); } 1) Объявили массив - { 1, 2, 3, 4, 5 }; 2) Значение суммы равно 0 - int sum = 0; 3) Цикл for в котором i = 2, (i < 5) - i не должно быть больше 5(Автор в видео почему то сказал что и РАВНО 5, может быть я его не правильно понял. (i = i + 1) - условие, если не выполнено i < 5. Дальше я не могу понять, что происходит. Объясните пожалуйста. Догадываюсь, но не могу грамотно объяснить даже, соответственно нельзя сказать, что я понимаю :/ ","creator":{"public_name":"Maxim","id":299519,"is_tutor":false},"comments":[{"creator":{"public_name":"Сергей Алексеенко","id":102837,"is_tutor":false},"id":101372,"body":"Изобразите это для себя иным способом. Я вот не все понял. И из расчетов Вы упустили цифру три.","topic_id":47030},{"creator":{"public_name":"Сергей Алексеенко","id":102837,"is_tutor":false},"id":101286,"body":"Еще раз здравствуйте.\n\nЯ отформатировал ваше сообщение для удобства чтения. Рекомендую также форматировать свои сообщения. ;)\n\n> Автор в видео почему то сказал что и РАВНО 5, может быть я его не правильно понял.\n\nВсе правильно Вы понимаете. `<` — это \"строго меньше\". Это означает, что то что слева не может быть ни равно, ни больше того, что справа от оператора `<`.\n\n> (i = i + 1) - условие, которое не дойдёт до максимума значения i < 5. То бишь 4 < 5.\n\nАбсолютно верно.\n\n> Дальше я не могу понять, что происходит. Догадываюсь, но не могу грамотно объяснить даже, соответственно нельзя сказать, что я понимаю :/\n\nА дальше мы в цикле достаем содержимое из массива, по очереди, и складываем их в переменную `sum`. Строчку внутри цикла можно еще переписать вот так: `sum = sum + numb[i];`.\n\n\nА в строке кода `System.out.println(\"Sum = \" + sum);` мы выводим на экран строку `\"Sum = \"` и содержимое переменной `sum`.\n \nУточняйте все, что еще осталось непонятным.","topic_id":47030},{"creator":{"public_name":"Сергей Алексеенко","id":102837,"is_tutor":false},"id":101501,"body":"> Просто я думаю, что i = 2, это цифра три, если начинать отсчёт с нуля. Массивы начинают считать с нуля. Или я не правильно рассуждаю?\n\nВот в этом утверждении все правильно.\n\nВы научились отличать содержимое ячеек от их нумерации. Для верности поэкспериментируйте со строками в массивах.\n\nТак же помните: нумерация ячеек массива начинается с нуля, а общая длинна массива задается без нуля!\n\nНапример, массив `{'a', 'b', 'd', 'e', 'f', 'g'}` будет иметь `length` шесть. Но что бы обратиться к первой ячейке — нужно использовать индекс `0`, а к последней — индекс `5`.","topic_id":47030},{"creator":{"public_name":"Maxim","id":299519,"is_tutor":false},"id":101308,"body":"Добрый вечер.\n\nСижу, думаю как правильно вопрос задать, даже не знаю. Просто ход мыслей напишу.\n\nТо есть цикл обратится к массиву **i = 2 + numb[] 1**, получит цифру **3**. \nЦифра **3 < 5**, дальше идёт **i = i + 1/ 3 + 1**, получим **4**.\n\nДальше **sum(4) = sum(0) + numb[i] (4)**. \n\nДальше из массива цифру **2** возьмёт, получит **4**, остановится т.к **i < 5**.\n\nПотом **sum(8) = sum(4) + numb[i] (4)**.\n\nПотом **System.out.println(\"Sum = \" + sum); 4 + 8 = 12?**\n\nТакое чувство, что бред написал.\n","topic_id":47030},{"creator":{"public_name":"Maxim","id":299519,"is_tutor":false},"id":101436,"body":"Он из массива будет складывать по очереди начиная с цифры 1 или с цифры 3?\n\n0 1 **2** 3 4\n\n1 2 3 4 5\n\nПросто я думаю, что i = 2, это цифра три, если начинать отсчёт с нуля. Массивы начинают считать с нуля. Или я не правильно рассуждаю? ","topic_id":47030}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Модуль 4. Урок 3. Циклы в Java.","entity_url":null,"active":true}},{"id":42399,"title":"В очередной раз мне кажется что у учителя решение не оптимальное, и в этот раз даже менее читабельно. Можно сделать проще, и не юзать доп ресурсы) К прмиеру зачем два счетчика и две операции сравнения? тут же условие простое )\n\nhttps://ru.hexlet.io/code_reviews/262300","plain_title":"В очередной раз мне кажется что у учителя решение не оптимальное, и в этот раз даже менее читабельно. Можно сделать проще, и не юзать доп ресурсы) К прмиеру зачем два счетчика и две операции сравнения? тут же условие простое ) https://ru.hexlet.io/code_reviews/262300 ","creator":{"public_name":"Igor Linder","id":261935,"is_tutor":false},"comments":[{"creator":{"public_name":"Сергей Алексеенко","id":102837,"is_tutor":false},"id":92224,"body":"**Igor Linder**, здравствуйте.\n\nНапоминаю, что решение учителя не идеал. Оно лишь показывает один из возможных вариантов решения. Иногда оно очень примитивное, в учебных целях.","topic_id":42399}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Модуль 4. Урок 3. Циклы в Java.","entity_url":null,"active":true}},{"id":200,"title":"Сколько звёздочек выведет следующий код: у меня получается 48 (((","plain_title":"Сколько звёздочек выведет следующий код: у меня получается 48 ((( ","creator":{"public_name":"Николай Артамонов","id":6107,"is_tutor":false},"comments":[{"creator":{"public_name":"Максим Собин","id":51411,"is_tutor":false},"id":617,"body":"Пока \"правильный\" ответ - 45.","topic_id":200},{"creator":{"public_name":"Вячеслав Ковалевский","id":5,"is_tutor":false},"id":383,"body":"Приносим свои извинения. Во время переноса теста на платформу Hexlet, был указан неверный вариант. Спасибо за помощь, уже исправляем.","topic_id":200},{"creator":{"public_name":"Глеб Бочкарёв","id":50147,"is_tutor":false},"id":1020,"body":"Поправили.","topic_id":200}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Модуль 4. Урок 3. Циклы в Java.","entity_url":null,"active":true}},{"id":45617,"title":"Здравствуйте.\nРовно с задания предыдущего урока перестал напрочь понимать, что происходит и что надо делать. Пересматривал темы, читал текстовые сопроводительные аннотации к уроку, обращался к другим бесплатным курсам по данным темам - безрезультатно. Просто перестал понимать что происходит в обучении и в рефакторинге кода игры. \n\nВ этот раз так же не справился с заданием на протяжении почти 2 недель. Пришлось открыть решение учителя в котором так же ничего не ясно. Зачем создавать переменные, делать два вложенных счетчика друг в друга? Почему нельзя написать проще и короче, типа, если кол-во фигурок Х больше О - возврат фигурки хода О, если кол-во фигурок О >= Х, то вернуть Х\n\nПРосьба помочь/посоветовать что в целом то делать дальше - учить или не учить при таких раскладах и тупняках. Заранее благодарю.","plain_title":"Здравствуйте. Ровно с задания предыдущего урока перестал напрочь понимать, что происходит и что надо делать. Пересматривал темы, читал текстовые сопроводительные аннотации к уроку, обращался к другим бесплатным курсам по данным темам - безрезультатно. Просто перестал понимать что происходит в обучении и в рефакторинге кода игры. В этот раз так же не справился с заданием на протяжении почти 2 недель. Пришлось открыть решение учителя в котором так же ничего не ясно. Зачем создавать переменные, делать два вложенных счетчика друг в друга? Почему нельзя написать проще и короче, типа, если кол-во фигурок Х больше О - возврат фигурки хода О, если кол-во фигурок О >= Х, то вернуть Х ПРосьба помочь/посоветовать что в целом то делать дальше - учить или не учить при таких раскладах и тупняках. Заранее благодарю. ","creator":{"public_name":"Борис Мусин","id":289658,"is_tutor":false},"comments":[{"creator":{"public_name":"Сергей Алексеенко","id":102837,"is_tutor":false},"id":98609,"body":"Здравствуйте.\n\n> Просто перестал понимать что происходит в обучении и в рефакторинге кода игры.\n\nРекомендую сосредоточиться на темах конкретных уроков. Игра будет меняться от урока к уроку, от задания к заданию. И только в конце этого курса игра \"ХО\" будет переписана с нуля.\n\nРефакторинг кода — это дополнительная _**необходимая**_ тренировка по работе с кодом. Нужно научиться понимать что происходит в текущем классе, пакете, проекте в целом исходя из кода. Да, сразу, по щелчку пальцами, это не получается. Я бы это сравнил с умением связывать слова в предложения, предложения в абзацы и т.д., только при чтении кода.\n\n> Зачем создавать переменные, делать два вложенных счетчика друг в друга? Почему нельзя написать проще и короче, типа, если кол-во фигурок Х больше О - возврат фигурки хода О, если кол-во фигурок О >= Х, то вернуть Х\n\nТак так и написано в коде \"решение учителя\":\n\n```java\n// ........\nif (countX == countO) {\n return \"X\";\n} else {\n return \"O\";\n}\n```\nВот в этом кусочке кода мы сравниваем количество фигурок на поле и возвращаем результат: или \"Х\", или \"О\".\n\n**НО**, перед этим, нужно же как-то посчитать количество этих фигурок на поле. А для этого нужно перебрать все поле... А перебор осуществляется циклами.\n\n\nУчить или не учить — решать Вам. А я рекомендую пересматривать учебный материал с перерывами, что бы лучше усваивался. К тому же: стоит всегда задавать вопросы не только при решении задания, но и в процессе изучения теории.\n\nНедопонимание отдельных тем в программировании часто вызвано пробелами в базовых знаниях программирования. Например, что бы не возникало вопросов \"зачем объявлять переменную\" нужно хотя бы в общем разбираться какие бывают типы данных и как с ними работать. \n\nP.S. Последние два задания выявили вероятные пробелы в знаниях и в подаче учебного материала. Задавайте вопросы — разберемся.\n\n","topic_id":45617}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Модуль 4. Урок 3. Циклы в Java.","entity_url":null,"active":true}},{"id":871,"title":"Что нужно дописать в данном цикле чтобы его тело полнилось ровно четыре раза?\n\nint i = 1;\nwhile (/* */) {\n i = i + 10; \n}\n\n\nни один ответ не засчитывается как правильный","plain_title":"Что нужно дописать в данном цикле чтобы его тело полнилось ровно четыре раза? int i = 1; while (/* */) { i = i + 10; } ни один ответ не засчитывается как правильный ","creator":{"public_name":"","id":57205,"is_tutor":false},"comments":[{"creator":{"public_name":"Глеб Бочкарёв","id":50147,"is_tutor":false},"id":1523,"body":"Исправили!","topic_id":871},{"creator":{"public_name":"Глеб Бочкарёв","id":50147,"is_tutor":false},"id":1541,"body":"Спасибо! По этому курсу да, будем готовить следующий.","topic_id":871},{"creator":{"public_name":"Глеб Бочкарёв","id":50147,"is_tutor":false},"id":1520,"body":"Не забывайте, что правильных вариантов ответа может быть больше одного.","topic_id":871},{"creator":{"public_name":"","id":57205,"is_tutor":false},"id":1521,"body":"спасибо) но тогда корректнее было бы задать вопрос \"что МОЖНО дописать в данном цикле, чтобы его тело ИСполнилось ровно четыре раза\" :)","topic_id":871},{"creator":{"public_name":"","id":57205,"is_tutor":false},"id":1524,"body":"отлично :) мне очень нравится курс, очень логичное и ясное объяснение материала, хоть я и все это знаю, что сейчас смотрю, все равно интересно слушать\\смотреть.\nя так понял, все видео уже отсняты и выложены?","topic_id":871}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Модуль 4. Урок 3. Циклы в Java.","entity_url":null,"active":true}},{"id":48269,"title":"Доброго времени суток) просьба проверить моё решение, так как слегка другое. может, я не вижу в нем минуса в будущем\nhttps://ru.hexlet.io/code_reviews/325798\n","plain_title":"Доброго времени суток) просьба проверить моё решение, так как слегка другое https://ru.hexlet.io/code_reviews/325798 ","creator":{"public_name":"Павел","id":316218,"is_tutor":false},"comments":[{"creator":{"public_name":"Татьяна Федорина","id":295577,"is_tutor":false},"id":103753,"body":"Здравствуйте, Павел!\nДа, решения преподавателей и студентов могут отличаться. \n\nК вашему коду у меня пара комментариев.\n\nОбъявлять _i,j_ полями класса нет необходимости. Эти переменные чаще всего используются, как параметры циклов. Да, я вижу, что вы используете их для создания экземпляра ```\nPoint```, но его тоже лучше создать в методе ```\ncurrentMove()```. Зачастую, поля класса объявляют, если они используются в разных методах класса. В вашем случае поля используются только в методе ```\ncurrentMove()```.\nПоле ```\nfiguresOnBoard``` увеличивается на 1 в методе ```\nfigureCount()```. А вы задали ```\nfiguresOnBoard``` начальное значение? Да, в этой программе с этим не возникло проблем, но я бы обращала внимание на инициализацию переменных. Это хорошая привычка, которая поможет избежать ошибок в будущем.\n \nЕсть комментарий по поводу проверки условий: как вы думаете, если не добавлена ни одна фигура, какое из условий сработает? Вы не думали, что условие ```\n(figuresOnBoard == 0)``` является частным случаем ```\n(figuresOnBoard % 2 == 0)```? Может достаточно проверить только одно?\n\nРаботая над своим решением помните, что оно должно быть простым и понятным. Не нужно усложнять код дополнительными проверками там, где их можно избежать. Успехов в следующих уроках!","topic_id":48269}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Модуль 4. Урок 3. Циклы в Java.","entity_url":null,"active":true}}],"lesson":{"exercise":null,"units":[{"id":289,"name":"theory","url":"/courses/java_101/lessons/loops_in_java/theory_unit"},{"id":291,"name":"quiz","url":"/courses/java_101/lessons/loops_in_java/quiz_unit"}],"links":[],"ordered_units":[{"id":289,"name":"theory","url":"/courses/java_101/lessons/loops_in_java/theory_unit"},{"id":291,"name":"quiz","url":"/courses/java_101/lessons/loops_in_java/quiz_unit"}],"id":206,"slug":"loops_in_java","state":"approved","name":"Модуль 4. Урок 3. Циклы в Java.","course_order":17,"goal":"Получить знания о том, что такое циклы и как их использовать на практике на примере языка Java.","self_study":null,"theory_video_provider":"vimeo","theory_video_uid":"139329815","theory":"Циклы используются для того, чтобы выполнить некое действие нужное количество раз. Ниже мы рассмотрим различные циклы в java.\n\nДля начала определимся: \n\n- **условие** — это выражение, которое пишется при объявлении цикла. Результатом вычисления выражения должен быть `boolean` результат. Либо `true`, либо `false`. Например: `a < b`, `something == something`, `myObject.equals(othetObject)`, `!myObject.equals(othetObject)`, `alpha != beta` и так далее. Про логические операторы нужно почитать [тут](http://developer.alexanderklimov.ru/android/java/logic_operators.php).\n- **break** — это ключевое слово, которое прерывает работу цикла. Пишется в теле цикла Его нужно писать только если необходимо прекратить работу цикла до его логического завершения согласно заданному условию.\n- **continue** — это ключевое слово принуждает цикл начать новую итерацию тут же. А код следующий за **continue**, в теле текущего цикла, не будет выполнен. **continue** нужно писать в теле цикла. \n\n## Рассмотрим варианты циклов\n\n Если мы знаем заранее, сколько раз нужно повторить некое действие, то используем цикл **for**.\n\n```java\nfor (int i = начальноеЗначениеСчетчика; условие; алгоритмИзмененияСчетчика) {\n // действие;\n // действие;\n}\n```\n\nВ этом цикле нужно:\n\n- объявить счетчик, который будет считать итерации текущего цикла;\n- задать условие, результатом вычисления которого будет либо `true` либо `false`;\n- задать алгоритм изменения счетчика.\n\nСчетчик принято объявлять типа `int`. Даже для нескольких итераций. И он не обязан начинаться с нуля.\n\nЦикл **for** будет проверять условие перед началом каждой итерации. Пока условие равно `true` — цикл будет выполнять итерацию.\nПосле каждой итерации цикл будет менять счетчик.\n\nПример в коде:\n\n```java\nfor (int i = 0; i <= 10; i++) {\n System.out.println(\"Something important\"); // 11 раз будет напечатан текст \"Something important\"\n}\n```\n\nЕго можно прервать раньше времени словом **break** или \"проскочить\" итерацию словом **continue**.\n\n```java\nfor (int i = 0; i <= 10; i++) {\n if (i % 2 == 0) { // остаток от деления на два равен нулю?\n System.out.println(i); //\n continue; // сразу переходим к следующей итерации\n }\n if (i == 9) {\n System.out.println(\"Finish now!\");\n break; // финиш жизни цикла\n }\n}\n```\n\nДля работы с массивами (и другими структурами данных) иногда лучше использовать **foreach**.\n\n```java\nfor (ТипСсылки имяСсылкиНаЭлемент : ссылкаНаМассив) {\n // действие;\n // действие;\n}\n```\n\nЭтот цикл получает ссылку на массив справа от двоеточия. А ссылка слева от двоеточия ссылается на ячейку №0 этого массива. С каждой итерацией ссылка будет ссылаться на следующую ячейку массива. И так до конца массива. Естественно, что в каждой ячейке может быть некий элемент. Содержимые в массиве элементы и ссылка слева от двоеточия должны быть одного типа.\n\nПосле достижения последней ячейки массива цикл **foreach** завершает свою работу. Этот цикл тоже можно прервать раньше времени словом **break** или \"проскочить\" итерацию словом **continue**.\n\nВ коде это будет выглядеть так:\n\n```java\n// где-то в main-методе...\nint[] testArray = new int[100];\n// наполним массив случайными числами в пределах от 0 до 99\n// для записи элементов в массив — foreach не подходит\nfor (int i = 0; i < testArray.length; i++) {\n testArray[i] = new Random().nextInt(100); // для работы рандома нужно импортировать соответствующий класс\n}\n// теперь применим foreach\nint numberOfIteration = 1; // просто для наглядности будем выводить номер итерации\nfor (int oneElementInArray : testArray) {\n if (oneElementInArray >= 50) { \n System.out.printf(\"\\nIteration number: %d __ Element: %d\", numberOfIteration,\n oneElementInArray); // печатаем в консоль на новой строке номер итерации\n // и элемент\n numberOfIteration++;\n continue; // переходим к следующей итерации и упускаем следующие строки в теле цикла\n }\n if (oneElementInArray == 0) { // сработает не в каждом запуске программы\n System.out.println(\"\\nWow, this is a numerical donut!\");\n break; // цикл завершится как только попадется элемент 0\n }\n}\n```\n\nЕсли заранее не знать количество повторений действий, то используем цикл **while**.\n\n```java\nwhile (условие) {\n // действие;\n // действие;\n}\n```\n\nЦикл **while** будет выполняться пока вычисление условия будет иметь результат `true`. Если написать в условии просто слово `true`, то цикл будет вечным!\n\nВот пример **while** в коде:\n\n```java\n// где-то в main-методе...\nint someNumber = 1;\nwhile (someNumber != 0) {\n someNumber = new Random().nextInt(100); // для работы рандома нужно импортировать соответствующий класс\n System.out.println(\"Current someNumber is: \" + someNumber);\n}\n```\n\nОбратите внимание, что нам пришлось задать начальное значение для `someNumber` равное `1`. Иначе цикл **while** ни разу не выполнился бы.\n\nНо, для подобных случаев есть иная форма записи цикла: **do-while**.\n\n```java\ndo {\n\t// действие;\n} while (условие);\n```\n\nТеперь мы можем для `someNumber` назначить начальное значение равное `0`.\nПример в коде:\n\n```java\n// где-то в main-методе...\nint someNumber = 0;\ndo {\n someNumber = new Random().nextInt(100); // не забываем импортировать класс Random\n System.out.println(\"Current someNumber is: \" + someNumber);\n} while (someNumber != 0);\n```\n\nТакая форма записи позволяет выполнить цикл хотя бы один раз и только потом проверить условие.\n\n## Полезные ссылки\n\n* [For Statement](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html)\n* [While, do-while statements](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/while.html)\n* [For-each loop](https://docs.oracle.com/javase/8/docs/technotes/guides/language/foreach.html)\n* [Branching Statements](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html)\n\n**Циклы for и while могут быть переиспользованы между собой:**\n\n<table class=\"table table-bordered\">\n<tr><th>while</th><th>for</th></tr>\n<tr>\n<td>\n<pre><code>\n<span class=\"text-primary\">int i = 3;</span>\nwhile (<span class=\"text-success\">i >= 0</span>)\n{\n System.out.println(i);\n <span class=\"text-danger\">i--;</span>\n}\n</code></pre>\n</td>\n<td>\n<pre><code>\nfor (<span class=\"text-primary\">int i = 3</span>; <span class=\"text-success\">i >= 0</span>; <span class=\"text-danger\">i--</span>)\n{\n System.out.println(i);\n}\n</code></pre>\n</td></tr>\n<tr>\n<td>\n<pre><code>\n<span class=\"text-primary\">int i = 0;</span>\nwhile (<span class=\"text-success\"> i &lsaquo; 3 </span>)\n{\n System.out.println(i);\n <span class=\"text-danger\">i++;</span>\n}\n</code></pre>\n</td>\n<td>\n<pre><code>\nfor (<span class=\"text-primary\">int i = 0</span>; <span class=\"text-success\">i &lsaquo; 3 </span>; <span class=\"text-danger\">i++</span>)\n{\n System.out.println(i);\n}\n</code></pre>\n</td></tr>\n<tr>\n<td>\n<pre><code>\nwhile (<span class=\"text-success\">true</span>)\n System.out.println(\"e\");\n</code></pre>\n</td>\n<td>\n<pre><code>\nfor (; <span class=\"text-success\">true</span>; )\n System.out.println(\"e\");\n</code></pre>\n</td></tr>\n</table>\n"},"lessonMember":null,"courseMember":null,"course":{"start_lesson":{"exercise":null,"units":[{"id":4,"name":"theory","url":"/courses/java_101/lessons/intro_to_java/theory_unit"}],"links":[],"ordered_units":[{"id":4,"name":"theory","url":"/courses/java_101/lessons/intro_to_java/theory_unit"}],"id":3,"slug":"intro_to_java","state":"approved","name":"Модуль 1. Урок 1. Введение в Java.","course_order":1,"goal":"Рассмотреть темы уроков сета Java 101: изучение Java с нуля, переход на Java SE8 и практическая разработка своего ПО.","self_study":null,"theory_video_provider":"youtube","theory_video_uid":"T13TlpHyxPU","theory":"## Цели курса\n\n* научиться основам программирования на Java\n* получить достаточно знаний, чтобы пройти сертификации первого уровня + основы функционального программирования из Java 8\n* получить практические навыки использования языка - написать реальный проект в процессе обучения\n\n## Условия для старта\n\n* добросовестно подходить к изучению\n* минимальное знание английского\n* необязательный опыт программирования\n* огромное желание учиться\n* внимательность!\n\nВ случае ядерной войны доступны контакты преподавателя курса (_в приоритете подписчики_):\n\n* skype: b0noii\n* e-mail: viacheslav@b0noi.com\n* twitter: [@b0noi](https://twitter.com/b0noi)\n\n## Структура курса\n\n* 10 больших модулей программы от oracle\n* на каждый модуль по 4+ урока\n* после курса будет большой тест.\n* почти каждый урок будет состоять из:\n\t- видео и текстового материала,\n\t- теста на основе теории и дополнительных материалов,\n\n## Дополнительные материалы\n\n- С первых дней обучения, уделяйте внимание [java code-style](https://www.lar.ru/java-codestyle/).\n- С тех же первых дней, у вас будет много вопросов и ошибок. Не стесняйтесь задавать вопросы! Но задавайте вопросы как можно точнее, чтобы получить точный ответ. Вот хорошая статья о том [как задавать вопросы](https://ru.hexlet.io/blog/posts/question-rules). Этот подход пригодится вам не только в обучении но и в работе!\n"},"id":31,"slug":"java_101","challenges_count":0,"name":"Введение в Java","allow_indexing":true,"state":"approved","course_state":"finished","pricing_type":"free","description":"Практический курс по Java «с нуля» от инженера с опытом работы в крупнейших ИТ-компаниях мира.\n\nКурс посвящен изучению основ Java, популярного объектно-ориентированного языка программирования, разработанного компанией Oracle. Программы на Java транслируются в байт-код, который выполняет виртуальная машина Java (JVM). JVM — это программа, обрабатывающая байтовый код и передающая инструкции оборудованию как интерпретатор. Это позволяет выполнять Java-приложения на любом устройстве, для которого существует соответствующая виртуальная машина, независимо от операционной системы и оборудования.\n\nКурс рассчитан как на людей, не сталкивавшихся с программированием, так и на начинающих программистов.\nРекомендуемое продолжение — курс [Java Generics](https://ru.hexlet.io/courses/java_generics).","kind":"sandbox","updated_at":"2026-01-20T11:54:32.501Z","language":"java","duration_cache":45120,"skills":["Создавать несложные программы, используя основные конструкции языка (условия, циклы, методы и другие)","Разделять код на методы для повторного использования","Правильно анализировать ошибки в коде и пользоваться отладочной печатью при их поиске"],"keywords":["основы Java","JVM","логика","типы данных","алгоритмы"],"lessons_count":38,"cover":"https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6ODk5NCwicHVyIjoiYmxvYl9pZCJ9fQ==--50ee157ee29e5c50f50aa2191806e9d83fca25e6/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJwbmciLCJyZXNpemVfdG9fZmlsbCI6WzYwMCw0MDBdfSwicHVyIjoidmFyaWF0aW9uIn19--6067466c2912ca31a17eddee04b8cf2a38c6ad17/image.png"},"recommendedLandings":[],"lessonMemberUnit":null,"accessToLearnUnitExists":true,"accessToCourseExists":true},"url":"/courses/java_101/lessons/loops_in_java/theory_unit","version":"0b0c6d4ebbd40fd58630a0dd89cc25544ccdf24e","encryptHistory":false,"clearHistory":false}"><style data-mantine-styles="true">:root, :host{--mantine-font-family: Arial, sans-serif;--mantine-font-family-headings: Arial, sans-serif;--mantine-heading-font-weight: normal;--mantine-radius-default: 0rem;--mantine-primary-color-filled: var(--mantine-color-indigo-filled);--mantine-primary-color-filled-hover: var(--mantine-color-indigo-filled-hover);--mantine-primary-color-light: var(--mantine-color-indigo-light);--mantine-primary-color-light-hover: var(--mantine-color-indigo-light-hover);--mantine-primary-color-light-color: var(--mantine-color-indigo-light-color);--mantine-spacing-xxl: calc(4rem * var(--mantine-scale));--mantine-font-size-xs: 12px;--mantine-font-size-sm: 14px;--mantine-font-size-md: 16px;--mantine-font-size-lg: clamp(16.0000px, calc(15.2727px + 0.2273vw), 18.0000px);--mantine-font-size-xl: clamp(16.0000px, calc(14.5455px + 0.4545vw), 20.0000px);--mantine-font-size-display-3: clamp(32.0000px, calc(26.1818px + 1.8182vw), 48.0000px);--mantine-font-size-display-2: clamp(36.0000px, calc(25.8182px + 3.1818vw), 64.0000px);--mantine-font-size-display-1: clamp(40.0000px, calc(25.4545px + 4.5455vw), 80.0000px);--mantine-font-size-h1: clamp(28.0000px, calc(23.6364px + 1.3636vw), 40.0000px);--mantine-font-size-h2: clamp(24.0000px, calc(21.0909px + 0.9091vw), 32.0000px);--mantine-font-size-h3: clamp(20.0000px, calc(17.0909px + 0.9091vw), 28.0000px);--mantine-font-size-h4: clamp(16.0000px, calc(13.0909px + 0.9091vw), 24.0000px);--mantine-font-size-h5: clamp(16.0000px, calc(14.5455px + 0.4545vw), 20.0000px);--mantine-font-size-h6: 1rem;--mantine-primary-color-0: var(--mantine-color-indigo-0);--mantine-primary-color-1: var(--mantine-color-indigo-1);--mantine-primary-color-2: var(--mantine-color-indigo-2);--mantine-primary-color-3: var(--mantine-color-indigo-3);--mantine-primary-color-4: var(--mantine-color-indigo-4);--mantine-primary-color-5: var(--mantine-color-indigo-5);--mantine-primary-color-6: var(--mantine-color-indigo-6);--mantine-primary-color-7: var(--mantine-color-indigo-7);--mantine-primary-color-8: var(--mantine-color-indigo-8);--mantine-primary-color-9: var(--mantine-color-indigo-9);--mantine-color-red-0: #ffeaea;--mantine-color-red-1: #fed4d4;--mantine-color-red-2: #f4a7a8;--mantine-color-red-3: #ec7878;--mantine-color-red-4: #e55050;--mantine-color-red-5: #e03131;--mantine-color-red-6: #e02829;--mantine-color-red-7: #c71a1c;--mantine-color-red-8: #b21218;--mantine-color-red-9: #9c0411;--mantine-color-violet-0: #fce9ff;--mantine-color-violet-1: #f1cfff;--mantine-color-violet-2: #e09bff;--mantine-color-violet-3: #d16fff;--mantine-color-violet-4: #be37fe;--mantine-color-violet-5: #b51afe;--mantine-color-violet-6: #b009ff;--mantine-color-violet-7: #9b00e4;--mantine-color-violet-8: #8a00cc;--mantine-color-violet-9: #7800b3;--mantine-color-indigo-0: #edecff;--mantine-color-indigo-1: #d6d5fe;--mantine-color-indigo-2: #aaa9f4;--mantine-color-indigo-3: #7b79eb;--mantine-color-indigo-4: #5451e4;--mantine-color-indigo-5: #3b37e0;--mantine-color-indigo-6: #2d2adf;--mantine-color-indigo-7: #1f1ec7;--mantine-color-indigo-8: #1819b2;--mantine-color-indigo-9: #0c149e;--mantine-color-cyan-0: #dffdff;--mantine-color-cyan-1: #caf5ff;--mantine-color-cyan-2: #99e8ff;--mantine-color-cyan-3: #64daff;--mantine-color-cyan-4: #3ccffe;--mantine-color-cyan-5: #24c8fe;--mantine-color-cyan-6: #00c2ff;--mantine-color-cyan-7: #00ade4;--mantine-color-cyan-8: #009acd;--mantine-color-cyan-9: #0085b5;--mantine-color-green-0: #e9fdec;--mantine-color-green-1: #d7f6dc;--mantine-color-green-2: #b0eab9;--mantine-color-green-3: #86df94;--mantine-color-green-4: #62d574;--mantine-color-green-5: #4ccf5f;--mantine-color-green-6: #3fcc54;--mantine-color-green-7: #2fb344;--mantine-color-green-8: #25a03b;--mantine-color-green-9: #138a2e;--mantine-color-yellow-0: #fff7e2;--mantine-color-yellow-1: #ffeecd;--mantine-color-yellow-2: #ffdc9c;--mantine-color-yellow-3: #ffc966;--mantine-color-yellow-4: #feb93a;--mantine-color-yellow-5: #feae1e;--mantine-color-yellow-6: #ffa90f;--mantine-color-yellow-8: #ca8200;--mantine-color-yellow-9: #af7000;--mantine-h1-font-size: clamp(28.0000px, calc(23.6364px + 1.3636vw), 40.0000px);--mantine-h1-font-weight: normal;--mantine-h2-font-size: clamp(24.0000px, calc(21.0909px + 0.9091vw), 32.0000px);--mantine-h2-font-weight: normal;--mantine-h3-font-size: clamp(20.0000px, calc(17.0909px + 0.9091vw), 28.0000px);--mantine-h3-font-weight: normal;--mantine-h4-font-size: clamp(16.0000px, calc(13.0909px + 0.9091vw), 24.0000px);--mantine-h4-font-weight: normal;--mantine-h5-font-size: clamp(16.0000px, calc(14.5455px + 0.4545vw), 20.0000px);--mantine-h5-font-weight: normal;--mantine-h6-font-size: 1rem;--mantine-h6-font-weight: normal;}
:root[data-mantine-color-scheme="dark"], :host([data-mantine-color-scheme="dark"]){--mantine-color-anchor: var(--mantine-color-text);--mantine-color-dimmed: #495057;--mantine-color-dark-filled: var(--mantine-color-dark-5);--mantine-color-dark-filled-hover: var(--mantine-color-dark-6);--mantine-color-dark-light: rgba(105, 105, 105, 0.15);--mantine-color-dark-light-hover: rgba(105, 105, 105, 0.2);--mantine-color-dark-light-color: var(--mantine-color-dark-0);--mantine-color-dark-outline: var(--mantine-color-dark-1);--mantine-color-dark-outline-hover: rgba(184, 184, 184, 0.05);--mantine-color-gray-filled: var(--mantine-color-gray-5);--mantine-color-gray-filled-hover: var(--mantine-color-gray-6);--mantine-color-gray-light: rgba(222, 226, 230, 0.15);--mantine-color-gray-light-hover: rgba(222, 226, 230, 0.2);--mantine-color-gray-light-color: var(--mantine-color-gray-0);--mantine-color-gray-outline: var(--mantine-color-gray-1);--mantine-color-gray-outline-hover: rgba(241, 243, 245, 0.05);--mantine-color-red-filled: var(--mantine-color-red-5);--mantine-color-red-filled-hover: var(--mantine-color-red-6);--mantine-color-red-light: rgba(236, 120, 120, 0.15);--mantine-color-red-light-hover: rgba(236, 120, 120, 0.2);--mantine-color-red-light-color: var(--mantine-color-red-0);--mantine-color-red-outline: var(--mantine-color-red-1);--mantine-color-red-outline-hover: rgba(254, 212, 212, 0.05);--mantine-color-pink-filled: var(--mantine-color-pink-5);--mantine-color-pink-filled-hover: var(--mantine-color-pink-6);--mantine-color-pink-light: rgba(250, 162, 193, 0.15);--mantine-color-pink-light-hover: rgba(250, 162, 193, 0.2);--mantine-color-pink-light-color: var(--mantine-color-pink-0);--mantine-color-pink-outline: var(--mantine-color-pink-1);--mantine-color-pink-outline-hover: rgba(255, 222, 235, 0.05);--mantine-color-grape-filled: var(--mantine-color-grape-5);--mantine-color-grape-filled-hover: var(--mantine-color-grape-6);--mantine-color-grape-light: rgba(229, 153, 247, 0.15);--mantine-color-grape-light-hover: rgba(229, 153, 247, 0.2);--mantine-color-grape-light-color: var(--mantine-color-grape-0);--mantine-color-grape-outline: var(--mantine-color-grape-1);--mantine-color-grape-outline-hover: rgba(243, 217, 250, 0.05);--mantine-color-violet-filled: var(--mantine-color-violet-5);--mantine-color-violet-filled-hover: var(--mantine-color-violet-6);--mantine-color-violet-light: rgba(209, 111, 255, 0.15);--mantine-color-violet-light-hover: rgba(209, 111, 255, 0.2);--mantine-color-violet-light-color: var(--mantine-color-violet-0);--mantine-color-violet-outline: var(--mantine-color-violet-1);--mantine-color-violet-outline-hover: rgba(241, 207, 255, 0.05);--mantine-color-indigo-filled: var(--mantine-color-indigo-5);--mantine-color-indigo-filled-hover: var(--mantine-color-indigo-6);--mantine-color-indigo-light: rgba(123, 121, 235, 0.15);--mantine-color-indigo-light-hover: rgba(123, 121, 235, 0.2);--mantine-color-indigo-light-color: var(--mantine-color-indigo-0);--mantine-color-indigo-outline: var(--mantine-color-indigo-1);--mantine-color-indigo-outline-hover: rgba(214, 213, 254, 0.05);--mantine-color-blue-filled: var(--mantine-color-blue-5);--mantine-color-blue-filled-hover: var(--mantine-color-blue-6);--mantine-color-blue-light: rgba(116, 192, 252, 0.15);--mantine-color-blue-light-hover: rgba(116, 192, 252, 0.2);--mantine-color-blue-light-color: var(--mantine-color-blue-0);--mantine-color-blue-outline: var(--mantine-color-blue-1);--mantine-color-blue-outline-hover: rgba(208, 235, 255, 0.05);--mantine-color-cyan-filled: var(--mantine-color-cyan-5);--mantine-color-cyan-filled-hover: var(--mantine-color-cyan-6);--mantine-color-cyan-light: rgba(100, 218, 255, 0.15);--mantine-color-cyan-light-hover: rgba(100, 218, 255, 0.2);--mantine-color-cyan-light-color: var(--mantine-color-cyan-0);--mantine-color-cyan-outline: var(--mantine-color-cyan-1);--mantine-color-cyan-outline-hover: rgba(202, 245, 255, 0.05);--mantine-color-teal-filled: var(--mantine-color-teal-5);--mantine-color-teal-filled-hover: var(--mantine-color-teal-6);--mantine-color-teal-light: rgba(99, 230, 190, 0.15);--mantine-color-teal-light-hover: rgba(99, 230, 190, 0.2);--mantine-color-teal-light-color: var(--mantine-color-teal-0);--mantine-color-teal-outline: var(--mantine-color-teal-1);--mantine-color-teal-outline-hover: rgba(195, 250, 232, 0.05);--mantine-color-green-filled: var(--mantine-color-green-5);--mantine-color-green-filled-hover: var(--mantine-color-green-6);--mantine-color-green-light: rgba(134, 223, 148, 0.15);--mantine-color-green-light-hover: rgba(134, 223, 148, 0.2);--mantine-color-green-light-color: var(--mantine-color-green-0);--mantine-color-green-outline: var(--mantine-color-green-1);--mantine-color-green-outline-hover: rgba(215, 246, 220, 0.05);--mantine-color-lime-filled: var(--mantine-color-lime-5);--mantine-color-lime-filled-hover: var(--mantine-color-lime-6);--mantine-color-lime-light: rgba(192, 235, 117, 0.15);--mantine-color-lime-light-hover: rgba(192, 235, 117, 0.2);--mantine-color-lime-light-color: var(--mantine-color-lime-0);--mantine-color-lime-outline: var(--mantine-color-lime-1);--mantine-color-lime-outline-hover: rgba(233, 250, 200, 0.05);--mantine-color-yellow-filled: var(--mantine-color-yellow-5);--mantine-color-yellow-filled-hover: var(--mantine-color-yellow-6);--mantine-color-yellow-light: rgba(255, 201, 102, 0.15);--mantine-color-yellow-light-hover: rgba(255, 201, 102, 0.2);--mantine-color-yellow-light-color: var(--mantine-color-yellow-0);--mantine-color-yellow-outline: var(--mantine-color-yellow-1);--mantine-color-yellow-outline-hover: rgba(255, 238, 205, 0.05);--mantine-color-orange-filled: var(--mantine-color-orange-5);--mantine-color-orange-filled-hover: var(--mantine-color-orange-6);--mantine-color-orange-light: rgba(255, 192, 120, 0.15);--mantine-color-orange-light-hover: rgba(255, 192, 120, 0.2);--mantine-color-orange-light-color: var(--mantine-color-orange-0);--mantine-color-orange-outline: var(--mantine-color-orange-1);--mantine-color-orange-outline-hover: rgba(255, 232, 204, 0.05);--app-cta-gradient: linear-gradient(90deg, var(--mantine-color-blue-9) 0%, var(--mantine-color-cyan-7) 100%);--app-color-surface: #2e2e2e;}
:root[data-mantine-color-scheme="light"], :host([data-mantine-color-scheme="light"]){--mantine-color-anchor: var(--mantine-color-text);--mantine-color-dimmed: #495057;--mantine-color-red-light: rgba(224, 40, 41, 0.1);--mantine-color-red-light-hover: rgba(224, 40, 41, 0.12);--mantine-color-red-outline-hover: rgba(224, 40, 41, 0.05);--mantine-color-violet-light: rgba(176, 9, 255, 0.1);--mantine-color-violet-light-hover: rgba(176, 9, 255, 0.12);--mantine-color-violet-outline-hover: rgba(176, 9, 255, 0.05);--mantine-color-indigo-light: rgba(45, 42, 223, 0.1);--mantine-color-indigo-light-hover: rgba(45, 42, 223, 0.12);--mantine-color-indigo-outline-hover: rgba(45, 42, 223, 0.05);--mantine-color-cyan-light: rgba(0, 194, 255, 0.1);--mantine-color-cyan-light-hover: rgba(0, 194, 255, 0.12);--mantine-color-cyan-outline-hover: rgba(0, 194, 255, 0.05);--mantine-color-green-light: rgba(63, 204, 84, 0.1);--mantine-color-green-light-hover: rgba(63, 204, 84, 0.12);--mantine-color-green-outline-hover: rgba(63, 204, 84, 0.05);--mantine-color-yellow-light: rgba(255, 169, 15, 0.1);--mantine-color-yellow-light-hover: rgba(255, 169, 15, 0.12);--mantine-color-yellow-outline-hover: rgba(255, 169, 15, 0.05);--app-color-surface: #f1f3f5;--app-cta-gradient: linear-gradient(90deg, var(--mantine-color-blue-filled) 0%, var(--mantine-color-cyan-5) 100%);}</style><style data-mantine-styles="classes">@media (max-width: 35.99375em) {.mantine-visible-from-xs {display: none !important;}}@media (min-width: 36em) {.mantine-hidden-from-xs {display: none !important;}}@media (max-width: 47.99375em) {.mantine-visible-from-sm {display: none !important;}}@media (min-width: 48em) {.mantine-hidden-from-sm {display: none !important;}}@media (max-width: 61.99375em) {.mantine-visible-from-md {display: none !important;}}@media (min-width: 62em) {.mantine-hidden-from-md {display: none !important;}}@media (max-width: 74.99375em) {.mantine-visible-from-lg {display: none !important;}}@media (min-width: 75em) {.mantine-hidden-from-lg {display: none !important;}}@media (max-width: 87.99375em) {.mantine-visible-from-xl {display: none !important;}}@media (min-width: 88em) {.mantine-hidden-from-xl {display: none !important;}}</style><div style="position:absolute;top:0rem" class=""></div><div style="max-width:var(--container-size-xl);height:100%;min-height:0rem" class=""><style data-mantine-styles="inline">.__m__-_R_5ub_{--grid-gutter:0rem;}</style><div style="height:100%;min-height:0rem" class="m_410352e9 mantine-Grid-root __m__-_R_5ub_"><div class="m_dee7bd2f mantine-Grid-inner" style="height:100%"><style data-mantine-styles="inline">.__m__-_R_rdub_{--col-flex-grow:auto;--col-flex-basis:91.66666666666667%;--col-max-width:91.66666666666667%;}@media(min-width: 48em){.__m__-_R_rdub_{--col-flex-grow:auto;--col-flex-basis:83.33333333333334%;--col-max-width:83.33333333333334%;}}</style><div style="min-width:0rem;height:100%;min-height:0rem;display:flex" class="m_96bdd299 mantine-Grid-col __m__-_R_rdub_"><style data-mantine-styles="inline">.__m__-_R_6qrdub_{margin-top:0rem;padding-inline:var(--mantine-spacing-xs);width:100%;}@media(min-width: 48em){.__m__-_R_6qrdub_{margin-top:var(--mantine-spacing-xl);width:80%;}}@media(min-width: 62em){.__m__-_R_6qrdub_{padding-inline:var(--mantine-spacing-xl);}}</style><div style="margin-inline:auto;max-width:var(--mantine-breakpoint-xl)" class="__m__-_R_6qrdub_"><div style="color:var(--mantine-color-dimmed)" class="m_4451eb3a mantine-Center-root" data-inline="true"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;margin-inline-end:calc(0.125rem * var(--mantine-scale));color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-lock "><path d="M5 13a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v6a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2v-6"></path><path d="M11 16a1 1 0 1 0 2 0a1 1 0 0 0 -2 0"></path><path d="M8 11v-4a4 4 0 1 1 8 0v4"></path></svg></div><p style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Введение в Java</p></div><h1 style="--title-fw:var(--mantine-h1-font-weight);--title-lh:var(--mantine-h1-line-height);--title-fz:var(--mantine-h1-font-size);margin-bottom:var(--mantine-spacing-xl)" class="m_8a5d1357 mantine-Title-root" data-order="1">Теория: Модуль 4. Урок 3. Циклы в Java.</h1><script type="application/ld+json">{"@context":"https://schema.org","@type":"LearningResource","name":"Модуль 4. Урок 3. Циклы в Java.","inLanguage":"ru","isPartOf":{"@type":"LearningResource","name":"Введение в Java"},"isAccessibleForFree":"False","hasPart":{"@type":"WebPageElement","isAccessibleForFree":"False","cssSelector":".paywalled"}}</script><div class=""><div style="--alert-color:var(--mantine-color-indigo-light-color);margin-bottom:var(--mantine-spacing-lg);font-size:var(--mantine-font-size-lg)" class="m_66836ed3 mantine-Alert-root" id="mantine-_R_remqrdub_" role="alert" aria-describedby="mantine-_R_remqrdub_-body" aria-labelledby="mantine-_R_remqrdub_-title"><div class="m_a5d60502 mantine-Alert-wrapper"><div class="m_667f2a6a mantine-Alert-icon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-rocket "><path d="M4 13a8 8 0 0 1 7 7a6 6 0 0 0 3 -5a9 9 0 0 0 6 -8a3 3 0 0 0 -3 -3a9 9 0 0 0 -8 6a6 6 0 0 0 -5 3"></path><path d="M7 14a6 6 0 0 0 -3 6a6 6 0 0 0 6 -3"></path><path d="M14 9a1 1 0 1 0 2 0a1 1 0 1 0 -2 0"></path></svg></div><div class="m_667c2793 mantine-Alert-body"><div class="m_6a03f287 mantine-Alert-title"><span id="mantine-_R_remqrdub_-title" class="m_698f4f23 mantine-Alert-label">Полный доступ к материалам</span></div><div id="mantine-_R_remqrdub_-body" class="m_7fa78076 mantine-Alert-message"><div style="--group-gap:var(--mantine-spacing-md);--group-align:center;--group-justify:space-between;--group-wrap:wrap" class="m_4081bf90 mantine-Group-root"><p class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Зарегистрируйтесь и получите доступ к этому и десяткам других курсов</p><a style="--button-height:var(--button-height-xs);--button-padding-x:var(--button-padding-x-xs);--button-fz:var(--mantine-font-size-xs);--button-bg:linear-gradient(45deg, var(--mantine-color-blue-filled) 0%, var(--mantine-color-cyan-filled) 100%);--button-hover:linear-gradient(45deg, var(--mantine-color-blue-filled) 0%, var(--mantine-color-cyan-filled) 100%);--button-color:var(--mantine-color-white);--button-bd:none" class="mantine-focus-auto mantine-active m_77c9d27d mantine-Button-root m_87cf2631 mantine-UnstyledButton-root" data-variant="gradient" data-size="xs" href="/u/new"><span class="m_80f1301b mantine-Button-inner"><span class="m_811560b9 mantine-Button-label">Зарегистрироваться</span></span></a></div></div></div></div></div><div style="margin-bottom:var(--mantine-spacing-xl)" class=""><div class="ratio ratio-16x9"><iframe width="100%" height="auto" src="//player.vimeo.com/video/139329815" loading="lazy" allowFullScreen="" title="video"></iframe></div></div><div class="paywalled m_d08caa0 mantine-Typography-root"><p>Циклы используются для того, чтобы выполнить некое действие нужное количество раз. Ниже мы рассмотрим различные циклы в java.</p>
<p>Для начала определимся:</p>
<ul>
<li><strong>условие</strong> — это выражение, которое пишется при объявлении цикла. Результатом вычисления выражения должен быть <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">boolean</code> результат. Либо <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">true</code>, либо <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">false</code>. Например: <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">a < b</code>, <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">something == something</code>, <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">myObject.equals(othetObject)</code>, <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">!myObject.equals(othetObject)</code>, <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">alpha != beta</code> и так далее. Про логические операторы нужно почитать <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="http://developer.alexanderklimov.ru/android/java/logic_operators.php" rel="noopener noreferrer" target="_blank">тут</a>.</li>
<li><strong>break</strong> — это ключевое слово, которое прерывает работу цикла. Пишется в теле цикла Его нужно писать только если необходимо прекратить работу цикла до его логического завершения согласно заданному условию.</li>
<li><strong>continue</strong> — это ключевое слово принуждает цикл начать новую итерацию тут же. А код следующий за <strong>continue</strong>, в теле текущего цикла, не будет выполнен. <strong>continue</strong> нужно писать в теле цикла. </li>
</ul>
<h2 id="heading-2-1">Рассмотрим варианты циклов</h2>
<p>Если мы знаем заранее, сколько раз нужно повторить некое действие, то используем цикл <strong>for</strong>.</p>
<div style="margin-bottom:var(--mantine-spacing-lg)" class="m_e597c321 mantine-CodeHighlight-codeHighlight" dir="ltr"><div class="m_be7e9c9c mantine-CodeHighlight-controls"><button style="--ai-bg:transparent;--ai-hover:transparent;--ai-color:inherit;--ai-bd:none" class="mantine-focus-auto mantine-active m_d498bab7 mantine-CodeHighlight-control m_8d3f4000 mantine-ActionIcon-root m_87cf2631 mantine-UnstyledButton-root" data-variant="none" type="button" aria-label="Copy code"><span class="m_8d3afb97 mantine-ActionIcon-icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M8 8m0 2a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-8a2 2 0 0 1 -2 -2z"></path><path d="M16 8v-2a2 2 0 0 0 -2 -2h-8a2 2 0 0 0 -2 2v8a2 2 0 0 0 2 2h2"></path></svg></span></button></div><div style="--scrollarea-scrollbar-size:calc(0.25rem * var(--mantine-scale));--sa-corner-width:0px;--sa-corner-height:0px" class="m_f744fd40 mantine-CodeHighlight-scrollarea m_d57069b5 mantine-ScrollArea-root" dir="ltr"><div style="overflow-x:hidden;overflow-y:hidden;overscroll-behavior-inline:none" class="m_c0783ff9 mantine-ScrollArea-viewport" data-scrollbars="xy"><div class="m_b1336c6 mantine-ScrollArea-content"><pre class="m_2c47c4fd mantine-CodeHighlight-pre" style="padding:0"><code class="m_5caae6d3 mantine-CodeHighlight-code">for (int i = начальноеЗначениеСчетчика; условие; алгоритмИзмененияСчетчика) {
// действие;
// действие;
}</code></pre></div></div></div><button class="mantine-focus-auto m_c9378bc2 mantine-CodeHighlight-showCodeButton m_87cf2631 mantine-UnstyledButton-root" data-hidden="true" type="button">Expand code</button></div>
<p>В этом цикле нужно:</p>
<ul>
<li>объявить счетчик, который будет считать итерации текущего цикла;</li>
<li>задать условие, результатом вычисления которого будет либо <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">true</code> либо <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">false</code>;</li>
<li>задать алгоритм изменения счетчика.</li>
</ul>
<p>Счетчик принято объявлять типа <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">int</code>. Даже для нескольких итераций. И он не обязан начинаться с нуля.</p>
<p>Цикл <strong>for</strong> будет проверять условие перед началом каждой итерации. Пока условие равно <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">true</code> — цикл будет выполнять итерацию.
После каждой итерации цикл будет менять счетчик.</p>
<p>Пример в коде:</p>
<div style="margin-bottom:var(--mantine-spacing-lg)" class="m_e597c321 mantine-CodeHighlight-codeHighlight" dir="ltr"><div class="m_be7e9c9c mantine-CodeHighlight-controls"><button style="--ai-bg:transparent;--ai-hover:transparent;--ai-color:inherit;--ai-bd:none" class="mantine-focus-auto mantine-active m_d498bab7 mantine-CodeHighlight-control m_8d3f4000 mantine-ActionIcon-root m_87cf2631 mantine-UnstyledButton-root" data-variant="none" type="button" aria-label="Copy code"><span class="m_8d3afb97 mantine-ActionIcon-icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M8 8m0 2a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-8a2 2 0 0 1 -2 -2z"></path><path d="M16 8v-2a2 2 0 0 0 -2 -2h-8a2 2 0 0 0 -2 2v8a2 2 0 0 0 2 2h2"></path></svg></span></button></div><div style="--scrollarea-scrollbar-size:calc(0.25rem * var(--mantine-scale));--sa-corner-width:0px;--sa-corner-height:0px" class="m_f744fd40 mantine-CodeHighlight-scrollarea m_d57069b5 mantine-ScrollArea-root" dir="ltr"><div style="overflow-x:hidden;overflow-y:hidden;overscroll-behavior-inline:none" class="m_c0783ff9 mantine-ScrollArea-viewport" data-scrollbars="xy"><div class="m_b1336c6 mantine-ScrollArea-content"><pre class="m_2c47c4fd mantine-CodeHighlight-pre" style="padding:0"><code class="m_5caae6d3 mantine-CodeHighlight-code">for (int i = 0; i <= 10; i++) {
System.out.println("Something important"); // 11 раз будет напечатан текст "Something important"
}</code></pre></div></div></div><button class="mantine-focus-auto m_c9378bc2 mantine-CodeHighlight-showCodeButton m_87cf2631 mantine-UnstyledButton-root" data-hidden="true" type="button">Expand code</button></div>
<p>Его можно прервать раньше времени словом <strong>break</strong> или "проскочить" итерацию словом <strong>continue</strong>.</p>
<div style="margin-bottom:var(--mantine-spacing-lg)" class="m_e597c321 mantine-CodeHighlight-codeHighlight" dir="ltr"><div class="m_be7e9c9c mantine-CodeHighlight-controls"><button style="--ai-bg:transparent;--ai-hover:transparent;--ai-color:inherit;--ai-bd:none" class="mantine-focus-auto mantine-active m_d498bab7 mantine-CodeHighlight-control m_8d3f4000 mantine-ActionIcon-root m_87cf2631 mantine-UnstyledButton-root" data-variant="none" type="button" aria-label="Copy code"><span class="m_8d3afb97 mantine-ActionIcon-icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M8 8m0 2a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-8a2 2 0 0 1 -2 -2z"></path><path d="M16 8v-2a2 2 0 0 0 -2 -2h-8a2 2 0 0 0 -2 2v8a2 2 0 0 0 2 2h2"></path></svg></span></button></div><div style="--scrollarea-scrollbar-size:calc(0.25rem * var(--mantine-scale));--sa-corner-width:0px;--sa-corner-height:0px" class="m_f744fd40 mantine-CodeHighlight-scrollarea m_d57069b5 mantine-ScrollArea-root" dir="ltr"><div style="overflow-x:hidden;overflow-y:hidden;overscroll-behavior-inline:none" class="m_c0783ff9 mantine-ScrollArea-viewport" data-scrollbars="xy"><div class="m_b1336c6 mantine-ScrollArea-content"><pre class="m_2c47c4fd mantine-CodeHighlight-pre" style="padding:0"><code class="m_5caae6d3 mantine-CodeHighlight-code">for (int i = 0; i <= 10; i++) {
if (i % 2 == 0) { // остаток от деления на два равен нулю?
System.out.println(i); //
continue; // сразу переходим к следующей итерации
}
if (i == 9) {
System.out.println("Finish now!");
break; // финиш жизни цикла
}
}</code></pre></div></div></div><button class="mantine-focus-auto m_c9378bc2 mantine-CodeHighlight-showCodeButton m_87cf2631 mantine-UnstyledButton-root" data-hidden="true" type="button">Expand code</button></div>
<p>Для работы с массивами (и другими структурами данных) иногда лучше использовать <strong>foreach</strong>.</p>
<div style="margin-bottom:var(--mantine-spacing-lg)" class="m_e597c321 mantine-CodeHighlight-codeHighlight" dir="ltr"><div class="m_be7e9c9c mantine-CodeHighlight-controls"><button style="--ai-bg:transparent;--ai-hover:transparent;--ai-color:inherit;--ai-bd:none" class="mantine-focus-auto mantine-active m_d498bab7 mantine-CodeHighlight-control m_8d3f4000 mantine-ActionIcon-root m_87cf2631 mantine-UnstyledButton-root" data-variant="none" type="button" aria-label="Copy code"><span class="m_8d3afb97 mantine-ActionIcon-icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M8 8m0 2a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-8a2 2 0 0 1 -2 -2z"></path><path d="M16 8v-2a2 2 0 0 0 -2 -2h-8a2 2 0 0 0 -2 2v8a2 2 0 0 0 2 2h2"></path></svg></span></button></div><div style="--scrollarea-scrollbar-size:calc(0.25rem * var(--mantine-scale));--sa-corner-width:0px;--sa-corner-height:0px" class="m_f744fd40 mantine-CodeHighlight-scrollarea m_d57069b5 mantine-ScrollArea-root" dir="ltr"><div style="overflow-x:hidden;overflow-y:hidden;overscroll-behavior-inline:none" class="m_c0783ff9 mantine-ScrollArea-viewport" data-scrollbars="xy"><div class="m_b1336c6 mantine-ScrollArea-content"><pre class="m_2c47c4fd mantine-CodeHighlight-pre" style="padding:0"><code class="m_5caae6d3 mantine-CodeHighlight-code">for (ТипСсылки имяСсылкиНаЭлемент : ссылкаНаМассив) {
// действие;
// действие;
}</code></pre></div></div></div><button class="mantine-focus-auto m_c9378bc2 mantine-CodeHighlight-showCodeButton m_87cf2631 mantine-UnstyledButton-root" data-hidden="true" type="button">Expand code</button></div>
<p>Этот цикл получает ссылку на массив справа от двоеточия. А ссылка слева от двоеточия ссылается на ячейку №0 этого массива. С каждой итерацией ссылка будет ссылаться на следующую ячейку массива. И так до конца массива. Естественно, что в каждой ячейке может быть некий элемент. Содержимые в массиве элементы и ссылка слева от двоеточия должны быть одного типа.</p>
<p>После достижения последней ячейки массива цикл <strong>foreach</strong> завершает свою работу. Этот цикл тоже можно прервать раньше времени словом <strong>break</strong> или "проскочить" итерацию словом <strong>continue</strong>.</p>
<p>В коде это будет выглядеть так:</p>
<div style="margin-bottom:var(--mantine-spacing-lg)" class="m_e597c321 mantine-CodeHighlight-codeHighlight" dir="ltr"><div class="m_be7e9c9c mantine-CodeHighlight-controls"><button style="--ai-bg:transparent;--ai-hover:transparent;--ai-color:inherit;--ai-bd:none" class="mantine-focus-auto mantine-active m_d498bab7 mantine-CodeHighlight-control m_8d3f4000 mantine-ActionIcon-root m_87cf2631 mantine-UnstyledButton-root" data-variant="none" type="button" aria-label="Copy code"><span class="m_8d3afb97 mantine-ActionIcon-icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M8 8m0 2a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-8a2 2 0 0 1 -2 -2z"></path><path d="M16 8v-2a2 2 0 0 0 -2 -2h-8a2 2 0 0 0 -2 2v8a2 2 0 0 0 2 2h2"></path></svg></span></button></div><div style="--scrollarea-scrollbar-size:calc(0.25rem * var(--mantine-scale));--sa-corner-width:0px;--sa-corner-height:0px" class="m_f744fd40 mantine-CodeHighlight-scrollarea m_d57069b5 mantine-ScrollArea-root" dir="ltr"><div style="overflow-x:hidden;overflow-y:hidden;overscroll-behavior-inline:none" class="m_c0783ff9 mantine-ScrollArea-viewport" data-scrollbars="xy"><div class="m_b1336c6 mantine-ScrollArea-content"><pre class="m_2c47c4fd mantine-CodeHighlight-pre" style="padding:0"><code class="m_5caae6d3 mantine-CodeHighlight-code">// где-то в main-методе...
int[] testArray = new int[100];
// наполним массив случайными числами в пределах от 0 до 99
// для записи элементов в массив — foreach не подходит
for (int i = 0; i < testArray.length; i++) {
testArray[i] = new Random().nextInt(100); // для работы рандома нужно импортировать соответствующий класс
}
// теперь применим foreach
int numberOfIteration = 1; // просто для наглядности будем выводить номер итерации
for (int oneElementInArray : testArray) {
if (oneElementInArray >= 50) {
System.out.printf("\nIteration number: %d __ Element: %d", numberOfIteration,
oneElementInArray); // печатаем в консоль на новой строке номер итерации
// и элемент
numberOfIteration++;
continue; // переходим к следующей итерации и упускаем следующие строки в теле цикла
}
if (oneElementInArray == 0) { // сработает не в каждом запуске программы
System.out.println("\nWow, this is a numerical donut!");
break; // цикл завершится как только попадется элемент 0
}
}</code></pre></div></div></div><button class="mantine-focus-auto m_c9378bc2 mantine-CodeHighlight-showCodeButton m_87cf2631 mantine-UnstyledButton-root" data-hidden="true" type="button">Expand code</button></div>
<p>Если заранее не знать количество повторений действий, то используем цикл <strong>while</strong>.</p>
<div style="margin-bottom:var(--mantine-spacing-lg)" class="m_e597c321 mantine-CodeHighlight-codeHighlight" dir="ltr"><div class="m_be7e9c9c mantine-CodeHighlight-controls"><button style="--ai-bg:transparent;--ai-hover:transparent;--ai-color:inherit;--ai-bd:none" class="mantine-focus-auto mantine-active m_d498bab7 mantine-CodeHighlight-control m_8d3f4000 mantine-ActionIcon-root m_87cf2631 mantine-UnstyledButton-root" data-variant="none" type="button" aria-label="Copy code"><span class="m_8d3afb97 mantine-ActionIcon-icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M8 8m0 2a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-8a2 2 0 0 1 -2 -2z"></path><path d="M16 8v-2a2 2 0 0 0 -2 -2h-8a2 2 0 0 0 -2 2v8a2 2 0 0 0 2 2h2"></path></svg></span></button></div><div style="--scrollarea-scrollbar-size:calc(0.25rem * var(--mantine-scale));--sa-corner-width:0px;--sa-corner-height:0px" class="m_f744fd40 mantine-CodeHighlight-scrollarea m_d57069b5 mantine-ScrollArea-root" dir="ltr"><div style="overflow-x:hidden;overflow-y:hidden;overscroll-behavior-inline:none" class="m_c0783ff9 mantine-ScrollArea-viewport" data-scrollbars="xy"><div class="m_b1336c6 mantine-ScrollArea-content"><pre class="m_2c47c4fd mantine-CodeHighlight-pre" style="padding:0"><code class="m_5caae6d3 mantine-CodeHighlight-code">while (условие) {
// действие;
// действие;
}</code></pre></div></div></div><button class="mantine-focus-auto m_c9378bc2 mantine-CodeHighlight-showCodeButton m_87cf2631 mantine-UnstyledButton-root" data-hidden="true" type="button">Expand code</button></div>
<p>Цикл <strong>while</strong> будет выполняться пока вычисление условия будет иметь результат <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">true</code>. Если написать в условии просто слово <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">true</code>, то цикл будет вечным!</p>
<p>Вот пример <strong>while</strong> в коде:</p>
<div style="margin-bottom:var(--mantine-spacing-lg)" class="m_e597c321 mantine-CodeHighlight-codeHighlight" dir="ltr"><div class="m_be7e9c9c mantine-CodeHighlight-controls"><button style="--ai-bg:transparent;--ai-hover:transparent;--ai-color:inherit;--ai-bd:none" class="mantine-focus-auto mantine-active m_d498bab7 mantine-CodeHighlight-control m_8d3f4000 mantine-ActionIcon-root m_87cf2631 mantine-UnstyledButton-root" data-variant="none" type="button" aria-label="Copy code"><span class="m_8d3afb97 mantine-ActionIcon-icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M8 8m0 2a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-8a2 2 0 0 1 -2 -2z"></path><path d="M16 8v-2a2 2 0 0 0 -2 -2h-8a2 2 0 0 0 -2 2v8a2 2 0 0 0 2 2h2"></path></svg></span></button></div><div style="--scrollarea-scrollbar-size:calc(0.25rem * var(--mantine-scale));--sa-corner-width:0px;--sa-corner-height:0px" class="m_f744fd40 mantine-CodeHighlight-scrollarea m_d57069b5 mantine-ScrollArea-root" dir="ltr"><div style="overflow-x:hidden;overflow-y:hidden;overscroll-behavior-inline:none" class="m_c0783ff9 mantine-ScrollArea-viewport" data-scrollbars="xy"><div class="m_b1336c6 mantine-ScrollArea-content"><pre class="m_2c47c4fd mantine-CodeHighlight-pre" style="padding:0"><code class="m_5caae6d3 mantine-CodeHighlight-code">// где-то в main-методе...
int someNumber = 1;
while (someNumber != 0) {
someNumber = new Random().nextInt(100); // для работы рандома нужно импортировать соответствующий класс
System.out.println("Current someNumber is: " + someNumber);
}</code></pre></div></div></div><button class="mantine-focus-auto m_c9378bc2 mantine-CodeHighlight-showCodeButton m_87cf2631 mantine-UnstyledButton-root" data-hidden="true" type="button">Expand code</button></div>
<p>Обратите внимание, что нам пришлось задать начальное значение для <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">someNumber</code> равное <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">1</code>. Иначе цикл <strong>while</strong> ни разу не выполнился бы.</p>
<p>Но, для подобных случаев есть иная форма записи цикла: <strong>do-while</strong>.</p>
<div style="margin-bottom:var(--mantine-spacing-lg)" class="m_e597c321 mantine-CodeHighlight-codeHighlight" dir="ltr"><div class="m_be7e9c9c mantine-CodeHighlight-controls"><button style="--ai-bg:transparent;--ai-hover:transparent;--ai-color:inherit;--ai-bd:none" class="mantine-focus-auto mantine-active m_d498bab7 mantine-CodeHighlight-control m_8d3f4000 mantine-ActionIcon-root m_87cf2631 mantine-UnstyledButton-root" data-variant="none" type="button" aria-label="Copy code"><span class="m_8d3afb97 mantine-ActionIcon-icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M8 8m0 2a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-8a2 2 0 0 1 -2 -2z"></path><path d="M16 8v-2a2 2 0 0 0 -2 -2h-8a2 2 0 0 0 -2 2v8a2 2 0 0 0 2 2h2"></path></svg></span></button></div><div style="--scrollarea-scrollbar-size:calc(0.25rem * var(--mantine-scale));--sa-corner-width:0px;--sa-corner-height:0px" class="m_f744fd40 mantine-CodeHighlight-scrollarea m_d57069b5 mantine-ScrollArea-root" dir="ltr"><div style="overflow-x:hidden;overflow-y:hidden;overscroll-behavior-inline:none" class="m_c0783ff9 mantine-ScrollArea-viewport" data-scrollbars="xy"><div class="m_b1336c6 mantine-ScrollArea-content"><pre class="m_2c47c4fd mantine-CodeHighlight-pre" style="padding:0"><code class="m_5caae6d3 mantine-CodeHighlight-code">do {
// действие;
} while (условие);</code></pre></div></div></div><button class="mantine-focus-auto m_c9378bc2 mantine-CodeHighlight-showCodeButton m_87cf2631 mantine-UnstyledButton-root" data-hidden="true" type="button">Expand code</button></div>
<p>Теперь мы можем для <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">someNumber</code> назначить начальное значение равное <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">0</code>.
Пример в коде:</p>
<div style="margin-bottom:var(--mantine-spacing-lg)" class="m_e597c321 mantine-CodeHighlight-codeHighlight" dir="ltr"><div class="m_be7e9c9c mantine-CodeHighlight-controls"><button style="--ai-bg:transparent;--ai-hover:transparent;--ai-color:inherit;--ai-bd:none" class="mantine-focus-auto mantine-active m_d498bab7 mantine-CodeHighlight-control m_8d3f4000 mantine-ActionIcon-root m_87cf2631 mantine-UnstyledButton-root" data-variant="none" type="button" aria-label="Copy code"><span class="m_8d3afb97 mantine-ActionIcon-icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M8 8m0 2a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-8a2 2 0 0 1 -2 -2z"></path><path d="M16 8v-2a2 2 0 0 0 -2 -2h-8a2 2 0 0 0 -2 2v8a2 2 0 0 0 2 2h2"></path></svg></span></button></div><div style="--scrollarea-scrollbar-size:calc(0.25rem * var(--mantine-scale));--sa-corner-width:0px;--sa-corner-height:0px" class="m_f744fd40 mantine-CodeHighlight-scrollarea m_d57069b5 mantine-ScrollArea-root" dir="ltr"><div style="overflow-x:hidden;overflow-y:hidden;overscroll-behavior-inline:none" class="m_c0783ff9 mantine-ScrollArea-viewport" data-scrollbars="xy"><div class="m_b1336c6 mantine-ScrollArea-content"><pre class="m_2c47c4fd mantine-CodeHighlight-pre" style="padding:0"><code class="m_5caae6d3 mantine-CodeHighlight-code">// где-то в main-методе...
int someNumber = 0;
do {
someNumber = new Random().nextInt(100); // не забываем импортировать класс Random
System.out.println("Current someNumber is: " + someNumber);
} while (someNumber != 0);</code></pre></div></div></div><button class="mantine-focus-auto m_c9378bc2 mantine-CodeHighlight-showCodeButton m_87cf2631 mantine-UnstyledButton-root" data-hidden="true" type="button">Expand code</button></div>
<p>Такая форма записи позволяет выполнить цикл хотя бы один раз и только потом проверить условие.</p>
<h2 id="heading-2-2">Полезные ссылки</h2>
<ul>
<li><a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html" rel="noopener noreferrer" target="_blank">For Statement</a></li>
<li><a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://docs.oracle.com/javase/tutorial/java/nutsandbolts/while.html" rel="noopener noreferrer" target="_blank">While, do-while statements</a></li>
<li><a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://docs.oracle.com/javase/8/docs/technotes/guides/language/foreach.html" rel="noopener noreferrer" target="_blank">For-each loop</a></li>
<li><a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html" rel="noopener noreferrer" target="_blank">Branching Statements</a></li>
</ul>
<p><strong>Циклы for и while могут быть переиспользованы между собой:</strong></p>
<div style="--table-min-width:calc(50rem * var(--mantine-scale));--sa-corner-width:0px;--sa-corner-height:0px" class="m_a100c15 mantine-TableScrollContainer-scrollContainer m_d57069b5 mantine-ScrollArea-root"><div style="overflow-x:hidden;overflow-y:hidden" class="m_c0783ff9 mantine-ScrollArea-viewport" data-offset-scrollbars="x" data-scrollbars="xy"><div class="m_b1336c6 mantine-ScrollArea-content"><div class="m_62259741 mantine-TableScrollContainer-scrollContainerInner"><table><tbody><tr><th>while</th><th>for</th></tr><tr><td>
<code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">,[object Object],
while (,[object Object],)
{
System.out.println(i);
,[object Object],
}</code>
</td><td>
<code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">for (,[object Object],; ,[object Object],; ,[object Object],)
{
System.out.println(i);
}</code>
</td></tr><tr><td>
<code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">,[object Object],
while (,[object Object],)
{
System.out.println(i);
,[object Object],
}</code>
</td><td>
<code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">for (,[object Object],; ,[object Object],; ,[object Object],)
{
System.out.println(i);
}</code>
</td></tr><tr><td>
<code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">while (,[object Object],)
System.out.println("e");</code>
</td><td>
<code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">for (; ,[object Object],; )
System.out.println("e");</code>
</td></tr></tbody></table></div></div></div></div></div></div></div></div><style data-mantine-styles="inline">.__m__-_R_1bdub_{--col-flex-grow:auto;--col-flex-basis:8.333333333333334%;--col-max-width:8.333333333333334%;}@media(min-width: 48em){.__m__-_R_1bdub_{--col-flex-grow:auto;--col-flex-basis:16.666666666666668%;--col-max-width:16.666666666666668%;}}</style><div style="min-width:0rem;height:100%;min-height:0rem" class="m_96bdd299 mantine-Grid-col __m__-_R_1bdub_"><div style="margin-inline:var(--mantine-spacing-xs)" class="mantine-visible-from-sm"><a style="--button-color:var(--mantine-color-white);margin-bottom:var(--mantine-spacing-lg);text-decoration:none" class="mantine-focus-auto m_849cf0da mantine-focus-auto m_77c9d27d mantine-Button-root m_87cf2631 mantine-UnstyledButton-root m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/courses/java_101/lessons/loops_in_java/finish_unit?unit=theory" data-disabled="true" data-block="true" disabled=""><span class="m_80f1301b mantine-Button-inner"><span class="m_811560b9 mantine-Button-label"><span style="margin-inline-end:var(--mantine-spacing-xs)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Дальше</span>→</span></span></a><a style="padding-inline:0rem" class="mantine-focus-auto m_f0824112 mantine-NavLink-root m_87cf2631 mantine-UnstyledButton-root"><span class="m_690090b5 mantine-NavLink-section" data-position="left"><div style="--ti-size:var(--ti-size-sm);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="sm"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-list-numbers "><path d="M11 6h9"></path><path d="M11 12h9"></path><path d="M12 18h8"></path><path d="M4 16a2 2 0 1 1 4 0c0 .591 -.5 1 -1 1.5l-3 2.5h4"></path><path d="M6 10v-6l-2 2"></path></svg></div></span><div class="m_f07af9d2 mantine-NavLink-body"><span class="m_1f6ac4c4 mantine-NavLink-label">Навигация по теме</span><span class="m_57492dcc mantine-NavLink-description">Теория</span></div><span class="m_690090b5 mantine-NavLink-section" data-position="right"></span></a><div style="margin-block:var(--mantine-spacing-lg)" class="m_3eebeb36 mantine-Divider-root" data-orientation="horizontal" role="separator"></div><div style="margin-block:var(--mantine-spacing-lg)" class=""><div style="justify-content:space-between;margin-bottom:calc(0.1875rem * var(--mantine-scale));color:var(--mantine-color-dimmed);font-size:var(--mantine-font-size-xs)" class="m_8bffd616 mantine-Flex-root __m__-_R_qimrbdub_"><p style="font-size:var(--mantine-font-size-xs)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Завершено</p><p style="font-size:var(--mantine-font-size-xs)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">0 / 38</p></div><div style="--progress-size:var(--progress-size-sm)" class="m_db6d6462 mantine-Progress-root" data-size="sm"><div style="--progress-section-size:0%;--progress-section-color:var(--mantine-color-gray-filled)" class="m_2242eb65 mantine-Progress-section" role="progressbar" aria-valuemax="100" aria-valuemin="0" aria-valuenow="0" aria-valuetext="0%"></div></div></div><button style="padding-inline:0rem" class="mantine-focus-auto m_f0824112 mantine-NavLink-root m_87cf2631 mantine-UnstyledButton-root" type="button"><span class="m_690090b5 mantine-NavLink-section" data-position="left"><div style="--ti-size:var(--ti-size-sm);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="sm"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-message "><path d="M8 9h8"></path><path d="M8 13h6"></path><path d="M18 4a3 3 0 0 1 3 3v8a3 3 0 0 1 -3 3h-5l-5 3v-3h-2a3 3 0 0 1 -3 -3v-8a3 3 0 0 1 3 -3h12"></path></svg></div></span><div class="m_f07af9d2 mantine-NavLink-body"><span class="m_1f6ac4c4 mantine-NavLink-label">Обсуждения (архив)</span><span class="m_57492dcc mantine-NavLink-description"></span></div></button><div style="--toc-bg:var(--mantine-color-blue-light);--toc-color:var(--mantine-color-blue-light-color);--toc-size:var(--mantine-font-size-sm);--toc-radius:var(--mantine-radius-sm);margin-top:var(--mantine-spacing-xl)" class="m_bcaa9990 mantine-TableOfContents-root" data-variant="light" data-size="sm"></div></div><div class="mantine-hidden-from-sm"><div style="--stack-gap:0rem;--stack-align:stretch;--stack-justify:flex-start" class="m_6d731127 mantine-Stack-root"><a style="--button-color:var(--mantine-color-white);margin-bottom:var(--mantine-spacing-xs);padding:0rem;text-decoration:none" class="mantine-focus-auto m_849cf0da mantine-focus-auto m_77c9d27d mantine-Button-root m_87cf2631 mantine-UnstyledButton-root m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/courses/java_101/lessons/loops_in_java/finish_unit?unit=theory" data-disabled="true" data-block="true" disabled=""><span class="m_80f1301b mantine-Button-inner"><span class="m_811560b9 mantine-Button-label">→</span></span></a><button style="--ai-size:var(--ai-size-sm);--ai-bg:transparent;--ai-hover:var(--mantine-color-indigo-light-hover);--ai-color:var(--mantine-color-indigo-light-color);--ai-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;padding-block:var(--mantine-spacing-lg);color:inherit;width:100%" class="mantine-focus-auto m_8d3f4000 mantine-ActionIcon-root m_87cf2631 mantine-UnstyledButton-root" data-variant="subtle" data-size="sm" data-disabled="true" type="button" disabled=""><span class="m_8d3afb97 mantine-ActionIcon-icon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-list-numbers "><path d="M11 6h9"></path><path d="M11 12h9"></path><path d="M12 18h8"></path><path d="M4 16a2 2 0 1 1 4 0c0 .591 -.5 1 -1 1.5l-3 2.5h4"></path><path d="M6 10v-6l-2 2"></path></svg></span></button><button style="--ai-size:var(--ai-size-sm);--ai-bg:transparent;--ai-hover:var(--mantine-color-indigo-light-hover);--ai-color:var(--mantine-color-indigo-light-color);--ai-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;padding-block:var(--mantine-spacing-lg);color:inherit;width:100%" class="mantine-focus-auto mantine-active m_8d3f4000 mantine-ActionIcon-root m_87cf2631 mantine-UnstyledButton-root" data-variant="subtle" data-size="sm" type="button"><span class="m_8d3afb97 mantine-ActionIcon-icon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-message "><path d="M8 9h8"></path><path d="M8 13h6"></path><path d="M18 4a3 3 0 0 1 3 3v8a3 3 0 0 1 -3 3h-5l-5 3v-3h-2a3 3 0 0 1 -3 -3v-8a3 3 0 0 1 3 -3h12"></path></svg></span></button></div></div></div></div></div></div></div>
</main>
<footer class="bg-dark fw-light text-light px-3 py-5">
<div class="row small">
<div class="col-12 col-sm-6 col-md-3">
<div class="h5 mb-3">Хекслет</div>
<ul class="list-unstyled">
<li>
<a class="nav-link link-light py-1 ps-0" href="/pages/about">О нас</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/testimonials">Отзывы</a>
</li>
<li>
<span class="nav-link link-light py-1 ps-0 external-link" data-href="https://b2b.hexlet.io" role="button">Корпоративное обучение</span>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/blog">Блог</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/qna">Вопросы и ответы</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/glossary">Глоссарий</a>
</li>
<li>
<span class="nav-link link-light py-1 ps-0 external-link" data-href="https://help.hexlet.io" data-target="_blank" role="button">Справка</span>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" target="_blank" rel="noopener noreferrer" href="/map">Карта сайта</a>
</li>
</ul>
</div>
<div class="col-12 col-sm-6 col-md-3">
<div class="h5 fw-normal mb-3">Направления</div>
<ul class="list-unstyled">
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_devops">DevOps
</a></li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_data_analytics">Аналитика
</a></li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_backend_development">Бэкенд
</a></li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_programming">Программирование
</a></li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_testing">Тестирование
</a></li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_front_end_dev">Фронтенд
</a></li>
</ul>
</div>
<div class="col-12 col-sm-6 col-md-3">
<div class="h5">Профессии</div>
<ul class="list-unstyled">
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/devops-engineer-from-scratch">DevOps-инженер с нуля</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/go">Go-разработчик</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/java">Java-разработчик</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/python">Python-разработчик </a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/data-analytics">Аналитик данных</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/qa-engineer">Инженер по ручному тестированию</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/php">РНР-разработчик</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/frontend">Фронтенд-разработчик</a>
</li>
</ul>
</div>
<div class="col-12 col-sm-6 col-md-3">
<div class="h5">Навыки</div>
<ul class="list-unstyled">
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/python-django-developer">Django</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/docker">Docker</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/php-laravel-developer">Laravel</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/postman">Postman</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/js-react-developer">React</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/js-rest-api">REST API в Node.js</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/spring-boot">Spring Boot</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/typescript">Typescript</a>
</li>
</ul>
</div>
</div>
<hr>
<div class="row">
<div class="col-12 col-sm-4 col-md-2">
<div class="fs-4">
<ul class="list-unstyled d-flex">
<li class="me-3">
<a aria-label="Telegram" target="_blank" class="link-light" rel="noopener noreferrer nofollow" href="https://t.me/hexlet_ru"><span class="bi bi-telegram"></span>
</a></li>
<li>
<a aria-label="Youtube" target="_blank" class="link-light" rel="noopener noreferrer nofollow" href="https://www.youtube.com/user/HexletUniversity"><span class="bi bi-youtube"></span>
</a></li>
</ul>
</div>
<div class="mb-2 d-flex flex-column">
<a class="link-light text-decoration-none" rel="nofollow" href="mailto:support@hexlet.io">support@hexlet.io</a>
<a class="link-light text-decoration-none py-2" target="_blank" href="https://t.me/hexlet_help_bot">t.me/hexlet_help_bot</a>
</div>
<ul class="list-unstyled d-flex">
<li class="me-3">
<span class="link-light text-decoration-none opacity-50 x-font-size-18 external-link" rel="nofollow" data-href="https://hexlet.io/locale/switch?new_locale=en" data-target="_self" role="button"><span class="my-auto">EN</span>
</span></li>
<li class="me-3">
<span class="link-light text-decoration-none opacity-50 x-font-size-18 opacity-100 external-link" rel="nofollow" data-href="https://ru.hexlet.io/locale/switch?new_locale=ru" data-target="_self" role="button"><span class="my-auto">RU</span>
</span></li>
<li class="me-3">
<span class="link-light text-decoration-none opacity-50 x-font-size-18 external-link" rel="nofollow" data-href="https://kz.hexlet.io/locale/switch?new_locale=kz" data-target="_self" role="button"><span class="my-auto">KZ</span>
</span></li>
</ul>
</div>
<div class="col-12 col-sm-4 col-md-3">
<ul class="list-unstyled fs-4">
<li class="mb-3">
<a class="link-light text-decoration-none" href="tel:8%20800%20100%2022%2047">8 800 100 22 47</a>
<span class="d-block opacity-50 small">бесплатно по РФ</span>
</li>
<li>
<a class="link-light text-decoration-none" href="tel:%2B7%20495%20085%2021%2062">+7 495 085 21 62</a>
<span class="d-block opacity-50 small">бесплатно по Москве</span>
</li>
</ul>
</div>
<div class="col-12 col-sm-4 col-md-3">
<div class="small mb-3">Образовательные услуги оказываются на основании Л035-01298-77/01989008 от 14.03.2025</div>
<ul class="list-unstyled small">
<li>
<a class="nav-link link-light py-1 ps-0" href="/pages/legal">Правовая информация</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/pages/offer">Оферта</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/pages/license">Лицензия</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/pages/contacts">Контакты</a>
</li>
</ul>
</div>
<div class="col-12 col-sm-12 col-md-4 small">
<div class="mb-2">
<div>ООО «<a href="/" class="text-decoration-none link-light">Хекслет Рус</a>»</div>
<div>108813 г. Москва, вн.тер.г. поселение Московский,</div>
<div>г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3</div>
<div>ОГРН 1217300010476</div>
<div>ИНН 7325174845</div>
</div>
<hr>
<div>АНО ДПО «<a href="/" class="text-decoration-none link-light">Учебный центр «Хекслет</a>»</div>
<div>119331 г. Москва, вн. тер. г. муниципальный округ</div>
<div>Ломоносовский, пр-кт Вернадского, д. 29</div>
<div>ОГРН 1247700712390</div>
<div>ИНН 7736364948</div>
</div>
</div>
</footer>
<div id="root-assistant-offcanvas"></div>
<script src="/vite/assets/assistant-CdBlNCiQ.js" crossorigin="anonymous" type="module"></script><link rel="modulepreload" href="/vite/assets/chunk-DsPFFUou.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/init-nkZBEvfU.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/ErrorFallbackBlock-naDSYSy9.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/MarkdownBlock-DbyKWoR_.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/gon-D3e4yh1x.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/mantine-CGMYrt2Y.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/shiki-V011pkdv.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/utils-DRqSHbQE.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/routes-CCH8ilKF.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/lib-XR8Qr8kR.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/dist-GCHh59xr.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Box-B5-OOzBf.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/notifications.store-C-3AFSMn.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/useIsomorphicEffect-HJ6VK0D3.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/lib-KSp6QbZ0.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/axios-BEvgo0ym.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/classnames-l6ipYlLR.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/dayjs.min-BkKovM-s.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/debounce-jMQ_Cf4f.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/i18next-BlSq9s7B.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/client-U9M77rxp.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/react-dom-DaLxUz_h.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/useTranslation-Bx1Cdrkz.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/compiler-runtime-6XxiPFnt.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/jsx-runtime-CwjcCKJi.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/react-CkL4ZRHB.js" as="script" crossorigin="anonymous">
<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v67327c56f0bb4ef8b305cae61679db8f1769101564043" integrity="sha512-rdcWY47ByXd76cbCFzznIcEaCN71jqkWBBqlwhF1SY7KubdLKZiEGeP7AyieKZlGP9hbY/MhGrwXzJC/HulNyg==" data-cf-beacon='{"version":"2024.11.0","token":"d11015b65d11429ea6b4a2ef37dd7e0b","server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' crossorigin="anonymous"></script>
</body>
</html>