<!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:18:48 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="qvCyyor535Z8JL14zZS4tvyap_s-TMqz6q6xzFtTCr1FIXn9eIdy9spnmeDBm0jBPJOKUTZ7NBFXTiuYCVTt0w";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. Урок 4. Оператор SWITCH в Java. | Введение в Java</title>
<meta name="description" content="Модуль 4. Урок 4. Оператор SWITCH в Java. / Введение в Java: Получить теоретические знания о операторе switch в Java и научится применять его на практике. В данном уроке представлена заключительная практика к модулю номер 3.">
<link rel="canonical" href="https://ru.hexlet.io/courses/java_101/lessons/java_switch/theory_unit">
<meta name="robots" content="noarchive">
<meta property="og:title" content="Модуль 4. Урок 4. Оператор SWITCH в Java.">
<meta property="og:title" content="Введение в Java">
<meta property="og:description" content="Модуль 4. Урок 4. Оператор SWITCH в Java. / Введение в Java: Получить теоретические знания о операторе switch в Java и научится применять его на практике. В данном уроке представлена заключительная практика к модулю номер 3.">
<meta property="og:url" content="https://ru.hexlet.io/courses/java_101/lessons/java_switch/theory_unit">
<meta name="csrf-param" content="authenticity_token" />
<meta name="csrf-token" content="jaQn14TzOE3Zs7kfTlrLIs5I7KsRvrxaCh_7-nNpoS1idezgdo2VLW_wnYdCVTtVDkHBARmJQvi3_2GuIW5GQw" />
<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:18:48.377Z","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":"NoeHv6ZwFzKWVPFxY_3Wd7kfyPqoXNMjmmpZtgQekkbZVkyIVA66UiAX1elv8iYAeRblUKBrLYEnisPiVhl1KA","topics":[{"id":32435,"title":" День добрый,\n\nНе могу уяснить для себя, как Вы обращаетесь к методу getFigure вообще и в данной подсказке в частности: \n\n\np1.x = 0;\n p2.x = 1;\n p3.x = 2;\n\n p1.y = i;\n p2.y = i;\n p3.y = i;\n\n if (field.getFigure(p1) != null\n\nДанный метод принимает на вход данные типа Point point, я полагал что в данной ситуации тип Point point следует выражать через метод Point класса Point – но Вы делаете по другому и моих знаний не хватает это понять, а просто переписывать подсказки на данном этапе не хочу))Можете пояснить как выразить конкретные переменные через тип Point point?\n","plain_title":" День добрый, Не могу уяснить для себя, как Вы обращаетесь к методу getFigure вообще и в данной подсказке в частности: p1.x = 0; p2.x = 1; p3.x = 2; p1.y = i; p2.y = i; p3.y = i; if (field.getFigure(p1) != null Данный метод принимает на вход данные типа Point point, я полагал что в данной ситуации тип Point point следует выражать через метод Point класса Point – но Вы делаете по другому и моих знаний не хватает это понять, а просто переписывать подсказки на данном этапе не хочу))Можете пояснить как выразить конкретные переменные через тип Point point? ","creator":{"public_name":"сергей коротков","id":245411,"is_tutor":false},"comments":[{"creator":{"public_name":"Сергей Алексеенко","id":102837,"is_tutor":false},"id":70433,"body":"Здравствуйте.\n\nПодсказка в задании весьма примитивна, хоть и работает. В ней упущен момент создания самого объекта `Point`, он создан где-то выше (условно). Подсказка нацелена показать алгоритм перебора поля и поиска победителя, согласно правил игры. \n\nМетод `Point` в классе `Point` является конструктором (потому он с большой буквы), и их там аж два: по умолчанию и кастомный (тот, что с аргументами). Конструкторы будем проходить далее по курсу. Вы не обязаны использовать их в этом задании. Но можете :)\n\n> Можете пояснить как выразить конкретные переменные через тип Point point?\n\nНе уверен, что абсолютно верно понял словосочетание \"выразить переменные\" (алгебра?). Но скажу так:\n\n1. В данном случае переменной может выступать как сам объект типа `Point` так и его внутренние поля.\n2. В подсказке в роли переменных выступают внутренние поля `Point`: `x` и `y`.\n\nРекомендую осмыслить свой алгоритм решения задачи поиска победителя на поле, отталкиваясь от правил игры. \n\n`Point` лишь хранит координаты той или иной клеточки на поле. А вот как Вы будете использовать `Point`... или каждый раз создавая новый объект с новыми координатами с применением кастомного конструктора или используя один и тот же объект `Point` и просто изменяя в нем значения полей с каждой итерацией. \n\n\nP.S. Вам придется повторить некий пройденный ранее материал, для решения этой задачи. И, возможно, пройти все дополнительные практические задания (испытания), что есть на данный момент в этом курсе. В любом случае не стесняйтесь задавать любые вопросы по теме задания или учебного материала.","topic_id":32435}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Модуль 4. Урок 4. Оператор SWITCH в Java.","entity_url":null,"active":true}},{"id":25074,"title":"Добрый день!\n\nПодскажите, пожалуйста, где можно найти код из видео по состоянию на данный урок?\n\nСпасибо!","plain_title":"Добрый день! Подскажите, пожалуйста, где можно найти код из видео по состоянию на данный урок? Спасибо! ","creator":{"public_name":"Mote Mere","id":159662,"is_tutor":false},"comments":[{"creator":{"public_name":"Сергей Алексеенко","id":102837,"is_tutor":false},"id":53609,"body":"Здравствуйте.\n\nНа данный момент код из этого урока недоступен.\n\nКрупные, порой бессвязные, изменения в коде проекта ХО обусловлены необходимостью раскрыть ту или иную тему, а не просто написать проект. То есть игра \"крестики-нолики\" в отдельных уроках ближе к абстракции чем к некому цельному проекту.\n\nСвязное написание проекта будет продемонстрировано в предпоследних уроках этого курса. ","topic_id":25074}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Модуль 4. Урок 4. Оператор SWITCH в Java.","entity_url":null,"active":true}},{"id":40795,"title":"Добрый день!\n\nМой подход в целом правильный - https://ru.hexlet.io/code_reviews/245212 ?\n\nРазделил на 3 смысловые блока: проверяем все строки, потом все столбцы, и потом диагональ. \nИли где-то сойдется 3 подряд или будет Null на выходе. \n\nКод ужасен конечно же) ","plain_title":"Добрый день! Мой подход в целом правильный - https://ru.hexlet.io/code_reviews/245212 ? Разделил на 3 смысловые блока: проверяем все строки, потом все столбцы, и потом диагональ. Или где-то сойдется 3 подряд или будет Null на выходе. Код ужасен конечно же) ","creator":{"public_name":"","id":208622,"is_tutor":false},"comments":[{"creator":{"public_name":"","id":208622,"is_tutor":false},"id":89133,"body":"Решил, ошибка была в цикле второй диагонали :)\n\nВопрос по решению учителя, вот тут: \n```\ntempPoint.x = cellInTheColumn;\ntempPoint.y = columnNumber;\ntempFigure = field.getFigure(tempPoint);\n```\n\nОткуда взялся ```tempPoint``` ? Это же новый объект? Мы его нигде раньше не объявляли же.\n","topic_id":40795},{"creator":{"public_name":"Сергей Алексеенко","id":102837,"is_tutor":false},"id":89136,"body":"> Откуда взялся tempPoint ? Это же новый объект? Мы его нигде раньше не объявляли же.\n\nПрямо на страничке кодревью воспользуйтесь поиском (`Ctrl + F`). Это поле объявлено сразу за `tempFigure`.","topic_id":40795},{"creator":{"public_name":"Сергей Алексеенко","id":102837,"is_tutor":false},"id":89060,"body":"Здравствуйте.\n\nТесты в выводе компилятора подсказывают: \n```\n##! Incorrectly return winner for the field: \nx\\y ➝\n↓ \n X | X | O \n ~~~~~~~~~~~\n O | O | X \n ~~~~~~~~~~~\n X | O | X \n\n It return: X. But must be: null\n```\nИщите ошибку в логике.\n_____\n`isNull(field, new Point(j, i)) == true` от этой записи можно отрезать `== true`, т.к. метод вернет уже `boolean` результат. Зачем его еще раз сверять?\n\nЕсли пишете условный оператор в одну строку, то не стоит его тело заключать в фигурные скобки.\nПример: `if (isNull(field, new Point(j, i)) == true){ break; }` —> `if (isNull(field, new Point(j, i)) == true) break;`\n\nОтдельно хочу предостеречь о `NullPointerException`! Т.к. Вы в коде вызываете метод `equals` у фигурки, которую вернет метод `getFigure`, а он может вернуть и `null`. Не безопаснее ли вызвать метод `equals` у конкретных строк, которые точно не `null`, а туда уже передавать, то, что вернет `getFigure`?\n\n\n________________________\nКод ваш выровнен замечательно. Но рекомендую ознакомиться [вот с этими правилами](https://www.lar.ru/java-codestyle/).\n\n\n\n","topic_id":40795}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Модуль 4. Урок 4. Оператор SWITCH в Java.","entity_url":null,"active":true}},{"id":43632,"title":"Добрый день! \nПомогите пожалуйста разобраться. \n\nВоспользовавшись всеми подсказками/ написал проверку строк и рядов. Диагонали увы, нашел простое решение в ревью учащихся. Все понятно, за исключением того, **как происходит решение без координаты 'y'?**\nВедь гетер возвращает фигурку по координатам 'x' и 'y', как то было при проверке строк и рядов. Не понимаю. Спасайте :)\n\n(ссылка на ревью, вопрос выше по коду, который закомментирован)\nhttps://ru.hexlet.io/code_reviews/275852","plain_title":"Добрый день! Помогите пожалуйста разобраться. Воспользовавшись всеми подсказками/ написал проверку строк и рядов. Диагонали увы, нашел простое решение в ревью учащихся. Все понятно, за исключением того, как происходит решение без координаты 'y'? Ведь координаты фигурки задаются 'x' и 'y'. Не понимаю. Спасайте :) (ссылка на ревью, вопрос выше по коду, который закомментирован) https://ru.hexlet.io/code_reviews/275852 ","creator":{"public_name":"Сергей Сардаев","id":267774,"is_tutor":false},"comments":[{"creator":{"public_name":"Сергей Алексеенко","id":102837,"is_tutor":false},"id":94819,"body":"Здравствуйте.\n\n> как происходит решение без координаты 'y'?\n\nМне кажется этот закомментированный кусок кода не полон. Непонятно вообще для чего он. Для диагоналей?\n\nПопробуйте разбить решение на отдельные методы.\n\nРекомендую регулярно перечитывать [вот эту статью](https://ru.hexlet.io/blog/posts/question-rules).\n\n","topic_id":43632},{"creator":{"public_name":"Сергей Сардаев","id":267774,"is_tutor":false},"id":94845,"body":"**Сергей Алексеенко**, да, но почему-то такой вариант решения сработал). Он был для диагоналей. \n\nСтатью прочитал, спасибо. Также разбил решение на отдельные методы, все получилось. Считаю вопрос решенным, благодарю)","topic_id":43632}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Модуль 4. Урок 4. Оператор SWITCH в Java.","entity_url":null,"active":true}},{"id":453,"title":"Подскажите, с этим тестовым заданием:\nЧто выведет на экран следующий код:\n```java\nint y, count = 0;\nfor(int x = 3; x < 6; x = x + 1) {\ntry {\nswitch(x) {\ncase 3: count = count + 1;\ncase 4: count = count + 1;\ncase 7: count = count + 1;\ncase 9: { y = 7 / (x - 4); count += 10; }\n}\n} catch (Exception ex) { count = count + 1; }\n}\nSystem.out.println(count);\n```\n- 2\n- 25\n- 15\n- 16\n\nПочему правильный ответ 16?\n\n- Сначала в switch идет 3 и исполняются все кейсы начиная с 3: 0+1+1+1+10=13\n- потом в switch идет 4 и исполняются все кейсы начиная с 4: 13+1+1+10=25\n- потом в switch идет 5 - это исключение: 25+1=26\n\nВ итоге получаем 26\n\nВ чем моя ошибка?","plain_title":"Подскажите, с этим тестовым заданием: Что выведет на экран следующий код: java int y, count = 0; for(int x = 3; x < 6; x = x + 1) { try { switch(x) { case 3: count = count + 1; case 4: count = count + 1; case 7: count = count + 1; case 9: { y = 7 / (x - 4); count += 10; } } } catch (Exception ex) { count = count + 1; } } System.out.println(count); - 2 - 25 - 15 - 16 Почему правильный ответ 16? Сначала в switch идет 3 и исполняются все кейсы начиная с 3: 0+1+1+1+10=13 потом в switch идет 4 и исполняются все кейсы начиная с 4: 13+1+1+10=25 потом в switch идет 5 - это исключение: 25+1=26 В итоге получаем 26 В чем моя ошибка? ","creator":{"public_name":"","id":49785,"is_tutor":false},"comments":[{"creator":{"public_name":"Anton Alexanin","id":464,"is_tutor":false},"id":742,"body":"Такая ситуация не является исключением. Просто ни один из случаев не выполняется.\n\nЕсли бы был default, то выполнился бы он.","topic_id":453},{"creator":{"public_name":"","id":49785,"is_tutor":false},"id":741,"body":"спасибо, понял. скажите, а что происходит в программе, когда x=5, ведь такого case нет? не будет ли это также исключением?","topic_id":453},{"creator":{"public_name":"","id":49785,"is_tutor":false},"id":755,"body":"спасибо","topic_id":453},{"creator":{"public_name":"Anton Alexanin","id":464,"is_tutor":false},"id":739,"body":"Во второй итерации цикла, когда x = 4, на строке с \"case 9:\" возникает исключение (y = 7 / (4-4) = 7 / 0). Деление на 0. Поэтому count += 10 не исполняется. Выполняется обработка исключения, count = count + 1. В дальнейшем count не меняется.","topic_id":453}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Модуль 4. Урок 4. Оператор SWITCH в Java.","entity_url":null,"active":true}},{"id":39464,"title":"Добрый вечер !\nПрошу помочь в решении данного практического урока. \nЗадание действительно очень непростое,а новичкам в java вроде меня, дается с большим трудом.\nНаписал код, но выдает ряд ошибок связанных с циклами, не очень понимаю в чем может быть проблема. \nСсылка на ревью \nhttps://ru.hexlet.io/code_reviews/229619","plain_title":"Добрый вечер ! Прошу помочь в решении данного практического урока. Задание действительно очень непростое,а новичкам в java вроде меня, дается с большим трудом. Написал код, но выдает ряд ошибок связанных с циклами, не очень понимаю в чем может быть проблема. Ссылка на ревью https://ru.hexlet.io/code_reviews/229619 ","creator":{"public_name":"Егор Сафонов","id":215642,"is_tutor":false},"comments":[{"creator":{"public_name":"Сергей Алексеенко","id":102837,"is_tutor":false},"id":86475,"body":"Приветствую.\n\nКасательно ошибки с циклом: думаю это просто опечатка. Будьте внимательны.\n\nИ почти в каждом методе я не вижу `return`. А это как минимум ошибка компиляции в методах, которые объявлены как те, что возвращают некий тип данных.\n\nНе спешите. Просто немного внимательности нужно :)","topic_id":39464},{"creator":{"public_name":"Сергей Алексеенко","id":102837,"is_tutor":false},"id":88836,"body":"Здравствуйте.\n\nПродолжим разбирать логику метода `getWinner`.\n\nРасскажите, с какой целью Вы создаете в нем `Point` без конкретных заданных параметров `x, y`? А потом еще пытаетесь по этой точке получить фигурку из поля...\n\nВ методе `getWinner` наблюдаю интересный `if`. Синтаксически он написан грамотно. Но никак не вяжется с логикой задачи. Вот Вы получили результаты работы вспомогательных методов и сохранили их в переменные `a, b, c, d`. Из них только одна может содержать победителя или вообще не одна.\nНаводящий вопрос: как этот один несчастный условный оператор `if` находит среди этих переменных только ту, что содержит победителя?\n\nПотому что пока-что в этом условном операторе происходит следующее: если есть любой победитель (будь то \"Х\", будь то \"О\") — вернуть любую фигурку по непонятной координате... Координата, кстати, будет 00.\n\nУ Вас же уже есть сохраненный победитель в `a, b, c, d`. Найдите его и верните.\n\nДумаю полезно будет сбросить прогресс в этом упражнении и решить его с нуля. И ОБЯЗАТЕЛЬНО распишите для себя словами логику решения. И только потом трогайте код!","topic_id":39464},{"creator":{"public_name":"Егор Сафонов","id":215642,"is_tutor":false},"id":88648,"body":"Здравствуйте.\nХотел бы поблагодарить за совет, о прохождении дополнительной практики, теперь чувствую себя более уверенно.\nКасательно моего решения, насколько я понимаю, оно почти готово. Я сделал небольшие правки, но осталась одна главная проблема, в главном методе getWinner по итогу всех моих проверок и манипуляций с циклами мне необходимо вернуть ту переменную в метод, которая обладает необходимой фигуркой выигрыша, но вот как это сделать я не очень понимаю, То есть возможно( а скорее даже точно) необходимо применить условие if/else, но как составить его в формате кода ума не приложу. Словесно звучит примерно так \"верни мне ту переменную которая равна, выигрываемой фигурке, иначе верни null), но вот в рамках кода, что-то совсем не представляю как реализовать. Не могли бы вы направить меня на правильную путь ? :)\nСсылку на ревью прикладываю, здесь я просто вернул одну из переменных, что естественно не правильно.\nhttps://ru.hexlet.io/code_reviews/229619","topic_id":39464},{"creator":{"public_name":"Егор Сафонов","id":215642,"is_tutor":false},"id":89178,"body":"Пробовал подобным способом. Такой способ говорит нам \"если а не равна null то верни ее, в противном случае, если b не равна null то верни ее и т.д пока не доходим до случае когда все переменные равны null, тогда мы говорим программе верни null. Но проблема аналогичная. Point1 убрал)\n\n```java\nскрыто\n```","topic_id":39464},{"creator":{"public_name":"Егор Сафонов","id":215642,"is_tutor":false},"id":86981,"body":"Добавил return, но компилятор сообщает, что условие, при котором победителя нет, не выявлено. Разве я рассмотрел не все доступные варианты ? Ощущение, что упускаю что-то очевидное \nСсылка на ревью \nhttps://ru.hexlet.io/code_reviews/229619","topic_id":39464},{"creator":{"public_name":"Сергей Алексеенко","id":102837,"is_tutor":false},"id":89343,"body":"> Возможно ли что ошибка в другом месте ?\n\nТак и есть.\n\nИ тесты, в выводе, подсказывают:\n\n```java\n##! Incorrectly return winner for the field: \nx\\y ➝\n↓ \n X | O | X \n ~~~~~~~~~~~\n | O | \n ~~~~~~~~~~~\n X | O | \n\n It return: null. But must be: O\n```\nПодозреваю, что ошибочка закралась в методе `checkVertical`, в точках. Но трудно разобрать код. Приведите его в порядок. [java-codestyle](https://www.lar.ru/java-codestyle/) ","topic_id":39464},{"creator":{"public_name":"Егор Сафонов","id":215642,"is_tutor":false},"id":89963,"body":"Заработало, большое спасибо, за вашу помощь, очень я уж долго сидел на этом методе, зато разобрался :) \nP.S. не предполагал, что оператор continue именно так работает, но в итоге помог именно он ","topic_id":39464},{"creator":{"public_name":"Егор Сафонов","id":215642,"is_tutor":false},"id":89420,"body":"Поправил код, но не уверен что ошибка в данном методе, т.к. в в выводе корректно отрабатывается проверка для X\n```\nWinner \"\nX\" is correct for the field: \nx\\y ➝\n↓ \n X | | O \n ~~~~~~~~~~~\n X | O | \n ~~~~~~~~~~~\n X | | \n```\nСсылка на ревью https://ru.hexlet.io/code_reviews/229619","topic_id":39464},{"creator":{"public_name":"Егор Сафонов","id":215642,"is_tutor":false},"id":89260,"body":"Добавил в ревью. Возможно ли что ошибка в другом месте ? \nhttps://ru.hexlet.io/code_reviews/229619","topic_id":39464},{"creator":{"public_name":"Сергей Алексеенко","id":102837,"is_tutor":false},"id":86995,"body":"> Разве я рассмотрел не все доступные варианты ?\n\nПросто ваше решение не правильно отрабатывает в случае, если на поле нет победителя. Компилятор об этом говорит: `It return: X. But must be: null`.\n\nИ действительно, судя по коду, не важно чего там вычислят все вспомогательные методы — в конце метода `getWinner` всегда будет возвращена фигурка по `point1`. Зачем? А `Point point1 = new Point();` с какой целью написано?\n\nПишите комментарии к своим решениям. Или документацию к целым методам. Это помогает выявлять подобные ошибки в логике кода еще на этапе его создания.\n\nДля того, что бы увидеть это — пройдитесь по коду как компьютер, построчно.","topic_id":39464},{"creator":{"public_name":"Сергей Алексеенко","id":102837,"is_tutor":false},"id":87267,"body":"> как мне казалось, если не добавлять внутренний return в метод, то значение полученные из проверки рядов, должны быть возвращены в метод\n\nЗначения проверок и так будут возвращены в метод, потому что проверочные методы сами возвращают результат своей работы (правильный или нет — пока не важно). И этот метод должен вернуть результат своей работы, потому и нужен в нем `return`.\n\nСудя по коду и вопросам — Вы упускаете логику возврата значения из метода. Рекомендую повторить соответствующие уроки про методы. Проблема оттуда. Порешайте дополнительные практические задания к этому курсу. И если там будет что-то непонятно, даже в теории — задавайте вопросы.\n\nТеперь о логике решения. Начнем с `checkThreePoint`: он выглядит рабочим. Но вот как он используется? Да, он вызывается в четырех методах. Но результат его работы нигде не сохраняется, да и вообще ни на что не влияет.\n\nОстальные методы, которые вызывают этот проверочный метод, не могут магическим способом ничего сделать с результатом работы метода `checkThreePoint`, а только то, что скажет программист.\n\nТо же самое касается и работы метода `getWinner`: пока программист не задаст команды и правила использования результатов работы методов — сами они не догадаются выбрать среди себя правильный результат и отдать на возврат.\n\nПотому, Вам, я рекомендую переписать свое решение с комментариями к каждому блоку кода — это поможет в обучении.\n\nИ пройдитесь по коду как компилятор, построчно, согласно правилам синтаксиса java, которые Вам уже известны. Это тоже подымит ваш уровень понимания методов.","topic_id":39464},{"creator":{"public_name":"Егор Сафонов","id":215642,"is_tutor":false},"id":89843,"body":"Добрый вечер.\nПопытался тут сообразить финальное решение с учетом ваших замечений. Но что-то, как-то не выходит, в принципе ясно как действовать, необходимо условие, при котором будет понятно, что возвращать нужно фигурку в том случае, если она не равна нулю, т.к. обычный return просто возвращает последнее значение. Вот только проблема в том, что я не очень понимаю, как мне уйти от этого момента. То есть, ясно, что необходимо каким-то образом проверять все диагонали, но как сделать так чтобы return не перезаписывался в цикле ? Как синтаксически вернуть каждое значение ? Пробовал через массивы, но получилась какая-то ересь как мне кажется( как минимум результат остался тем же).\nПока к сожалению вот так https://ru.hexlet.io/code_reviews/229619\n\nP.S. понимаю, что нужно поменять два метода, но пока сосредоточен на проработке логики, т.к. у второго метода будет тоже самое","topic_id":39464},{"creator":{"public_name":"Егор Сафонов","id":215642,"is_tutor":false},"id":86575,"body":"Добрый день !\nЦикл поправил, но не очень понимаю, что мне необходимо вернуть в результате работы моих методов. Если правильно понимаю, необходимо вернуть либо X, либо O,либо Null, но как это сделать ? Через доп условие к каждому методу ? ","topic_id":39464},{"creator":{"public_name":"Сергей Алексеенко","id":102837,"is_tutor":false},"id":89442,"body":"Доброе утро.\n\nВ методах `getWinner` и `checkThreePoint` форматирование требует еще пары легких правок. В остальном все круто.\n\n\nТекущее решение уже почти готово, я проверил на локальном компьютере. Обратите внимание на выход из цикла в методах проверки горизонталей и вертикалей. В приведенном вами примере, где был найден победитель `X` и кроется отгадка: циклы пока-что делают только один проход. Потому что в конце каждого такого цикла стоит императивный `return`, без каких либо условий. Получается, что каждый такой цикл возвращает результат только по первой воображаемой линии, из трех.\n\n\n","topic_id":39464},{"creator":{"public_name":"Сергей Алексеенко","id":102837,"is_tutor":false},"id":89229,"body":"> Пробовал подобным способом. Такой способ говорит нам \"если а не равна null то верни ее, в противном случае, если b не равна null то верни ее и т.д пока не доходим до случае когда все переменные равны null, тогда мы говорим программе верни null.\n\nВот это верное решение. Только я его не наблюдаю что-то в кодревью.\n\n","topic_id":39464},{"creator":{"public_name":"Сергей Алексеенко","id":102837,"is_tutor":false},"id":89965,"body":"> очень я уж долго сидел на этом методе, зато разобрался :)\n\nИ правильно. Это базовый курс, упускать детали — очень вредно, в итоге.\n\n> не предполагал, что оператор continue именно так работает, но в итоге помог именно он\n\nВ ревью не вижу спешного решения.\n\nНо у этой задачи есть множество подходов к решению. Рекомендую изучить ревью других учащихся, к этому заданию. Там великое разнообразие подходов. Есть что почерпнуть для себя.","topic_id":39464},{"creator":{"public_name":"Егор Сафонов","id":215642,"is_tutor":false},"id":88790,"body":"Так, похоже проблему я решил, но образовалась другая, которая мне ну совсем не понятно, по какой-то причине возвращается null, хотя должен O и это как мне кажется очень странно т.к. в методе checkThreePoint проверка должна находить именно победителя по итогу хода и соответственно она возвращает его в каждом методе, пока не дойдет до главного. Снова ощущение будто упускаю, что-то очевидное, кажется будто я все ближе и ближе к тому что закончить метод :)\nСсылка на ревью\nhttps://ru.hexlet.io/code_reviews/229619","topic_id":39464},{"creator":{"public_name":"Сергей Алексеенко","id":102837,"is_tutor":false},"id":86682,"body":"Добрый день.\n\n\n> Если правильно понимаю, необходимо вернуть либо X, либо O,либо Null\n\nПравильно.\n\n> но как это сделать ? \n\nПодобно тому, как Вы это сделали в методе `checkThreePoint`.","topic_id":39464},{"creator":{"public_name":"Сергей Алексеенко","id":102837,"is_tutor":false},"id":89879,"body":"> но как сделать так чтобы return не перезаписывался в цикле ?\n\nА условные операторы не подходят? \n\nНапишите словами себе алгоритм метода, хоть прям тут. А потом просто реализуйте его в коде. У Вас уже есть все необходимые знания для этого.","topic_id":39464},{"creator":{"public_name":"Сергей Алексеенко","id":102837,"is_tutor":false},"id":88680,"body":"Так, очень хорошо, что Вы осознаете в чем проблема — теперь можно ее решить.\n\nЕсть такая тема: \"Модуль 4. Урок 1. Условный оператор IF в Java\". Освежите ее в памяти, возможно, стоит пройти повторно упражнение к тому уроку.\n\n> Касательно моего решения, насколько я понимаю, оно почти готово.\n\nДа, метод `getWinner` почти готов, Вы на верном пути. Рекомендую нарисовать себе план решения этого метода на бумаге, обычными словами. Разбейте этот план на минимально возможные составные части.\nИ только после этого стоит писать код.\n\n","topic_id":39464},{"creator":{"public_name":"Егор Сафонов","id":215642,"is_tutor":false},"id":87214,"body":"Возможно я просто не понимаю, что конкретно мне необходимо вернуть по итогу окончания метода getWinner, как мне казалось, если не добавлять внутренний return в метод, то значение полученные из проверки рядов, должны быть возвращены в метод. По итогу всех проверок, мне же необходимо вернуть либо \"X\", либо null. Программа настаивает чтобы был какой-то явный return, но какой ? Что-то совсем запутался(","topic_id":39464}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Модуль 4. Урок 4. Оператор SWITCH в Java.","entity_url":null,"active":true}},{"id":48569,"title":"Если честно я в шоке, что у меня все заработало, ибо последние 3 задания давались со скрипом и с подсмотром решения учителя. Но тут я решила идти до конца, как написано в рекомендациях. Пришлось пересмотреть много уроков и много гуглить, но в тот момент когда все скомпилировалось и тесты прошли это было вау. Снова появилась вера в свои силы. Понимаю, что код есть куда совершенствовать, но сделанное лучше идеального. Продолжаю с новыми силами \nhttps://ru.hexlet.io/code_reviews/329163","plain_title":"Если честно я в шоке, что у меня все заработало, ибо последние 3 задания давались со скрипом и с подсмотром решения учителя. Но тут я решила идти до конца, как написано в рекомендациях. Пришлось пересмотреть много уроков и много гуглить, но в тот момент когда все скомпилировалось и тесты прошли это было вау. Снова появилась вера в свои силы. Понимаю, что код есть куда совершенствовать, но сделанное лучше идеального. Продолжаю с новыми силами https://ru.hexlet.io/code_reviews/329163 ","creator":{"public_name":"Мария Салтанова","id":311303,"is_tutor":false},"comments":[{"creator":{"public_name":"Сергей Алексеенко","id":102837,"is_tutor":false},"id":104307,"body":"Замечательно!\n\nТяжело в учении — легко в бою!\n\nВаше решение лаконичнее решения учителя.\n\nНо стиль кода нужно поправить! Это, в итоге, может навредить, когда коллеги не смогут читать ваш код или Вы сами не сможете разобраться в собственном коде месячной давности. Отступы, расположение скобок — начните с них.\n\n\nРекомендую вернуться к этому заданию через некоторое время и решить задачу для поля любой размерности (в пределах положительных значений `int`). Это дополнительная \"прокачка\".\n\n**Отдельно дополню про сравнение объектов `String`.**\n\nДля сравнения строк лучше использовать метод `equals` чем оператор `==` (это касается вообще всех НЕ примитивов). Это связано с тем, что по содержимому объекты могут быть идентичны, а в оперативной памяти это два разных объекта. А оператор `==` сравнивает не объекты, а ссылки на объекты.\n\nИ, конкретно в данном случае, вариант с оператором `==` сработал только потому, что в JVM есть пул строк, которые часто используются. Это нужно для экономии памяти. И, в данном случае, каждое объявление `\"X\"` или `\"O\"` не создает новый объект в памяти, а просто передает ссылку на пул строк, где уже есть объект `String` `\"X\"` или `\"O\"`.\n\nТак что при сравнении объектов `String`, которых нет в пуле строк с помощью оператора `==`, — всегда приведет к `false`.\n\nВот код-пример для наглядности:\n\n```java\npublic class Main {\n\n public static void main(String[] args) {\n String firstStr = new String(\"Тестовый объект \\\"String\\\" который не помещен в пул строк JVM.\");\n String secondStr = new String(\"Тестовый объект \\\"String\\\" который не помещен в пул строк JVM.\");\n System.out.println(firstStr == secondStr);\n System.out.println(firstStr.equals(secondStr));\n }\n}\n```","topic_id":48569}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Модуль 4. Урок 4. Оператор SWITCH в Java.","entity_url":null,"active":true}},{"id":27884,"title":"Прошу покритиковать моё [решение](https://ru.hexlet.io/code_reviews/111425) для поля произвольного размера.","plain_title":"Прошу покритиковать моё решение (https://ru.hexlet.io/code_reviews/111425) для поля произвольного размера. ","creator":{"public_name":"Mote Mere","id":159662,"is_tutor":false},"comments":[{"creator":{"public_name":"Сергей Алексеенко","id":102837,"is_tutor":false},"id":59915,"body":"Здравствуйте.\n\nРешение рабочее на размере поля 4 и 5. Дальше не тестил.\n\nКод читабельный. И это классно.\n\nЕсть только несколько заметок по оптимизации:\n1) Методы `checkLine` и `checkColumn` можно не вызывать два раза в условии, а достаточно сохранить результат один раз перед условием но внутри цикла. Как ниже по коду с диагональками.\n\n2) `String` переменные можно сделать `final` на всякий случай.\n3) И эти же переменные - не идеально \"говорящие\". https://ru.hexlet.io/blog/posts/naming-in-programming","topic_id":27884},{"creator":{"public_name":"Mote Mere","id":159662,"is_tutor":false},"id":59962,"body":"Спасибо! [Отрефакторил](https://ru.hexlet.io/code_reviews/111425).","topic_id":27884}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Модуль 4. Урок 4. Оператор SWITCH в Java.","entity_url":null,"active":true}},{"id":46656,"title":"Направьте на путь истинный , пожалуйста!\nВсе в голову не лезет как эта ошибка выходит?\nhttps://ru.hexlet.io/code_reviews/306137","plain_title":"Направьте на путь истинный , пожалуйста! Все в голову не лезет как эта ошибка выходит? https://ru.hexlet.io/code_reviews/306137 ","creator":{"public_name":"Sergei","id":307220,"is_tutor":false},"comments":[{"creator":{"public_name":"Сергей Алексеенко","id":102837,"is_tutor":false},"id":100580,"body":"Добрый день.\n\n> Направьте на путь истинный , пожалуйста! Все в голову не лезет как эта ошибка выходит? \n\nТекущий код не всегда сбрасывает счетчики перед новой итерацией. Напоминаю: метод `getWinner` будет вызываться много раз, но объект `WinnerController` может быть одним и тем же.\n\nИ выполните требования линтера. Вот так вот рандомно писать код — плохая практика. )","topic_id":46656}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Модуль 4. Урок 4. Оператор SWITCH в Java.","entity_url":null,"active":true}},{"id":5145,"title":"Подскажите пожалуйста, в чем разница между\n```\n\"\".equals(field.getFigure(point)) \n```\nи \n```\nfield.getFigure(point).equals(\"\") \n```\nВо втором случае было исключение NullPointerException и ничего не работало, но разницы особо не понимаю между ними.\nСам код - https://ru.hexlet.io/code_reviews/5011","plain_title":"Подскажите пожалуйста, в чем разница между \"\".equals(field.getFigure(point)) и field.getFigure(point).equals(\"\") Во втором случае было исключение NullPointerException и ничего не работало, но разницы особо не понимаю между ними. Сам код - https://ru.hexlet.io/code_reviews/5011 ","creator":{"public_name":"Максим Лукашов","id":110205,"is_tutor":false},"comments":[{"creator":{"public_name":"Вячеслав Ковалевский","id":5,"is_tutor":false},"id":9030,"body":"Это очень важный момент, давайте его рассмотрим, вот эту строку:\n\n```java\nfield.getFigure(point).equals(\"\") \n```\n\nможно расписать вот так:\n```java\nfinal String figure = field.getFigure(point);\nfigure.equals(\"\");\n```\n\nКак можно заметить, если ```figure``` равно ```null``` то попытка вызвать у него метод ```equals``` приведет ко падению по NPE. Теперь давайте проанализируем следующую строку: \n\n```java\n\"\".equals(field.getFigure(point)) \n```\n\nЕе можно переписать вот так:\n\n```\nfinal String figure = field.getFigure(point);\n\"\".equals(figure);\n``` \n\nА вот эта версия уже не упадет по NPE даже если ```figure``` будет ```null``` так как ```equals``` просто возвращает ```false``` если на вход передали ```null```.","topic_id":5145}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Модуль 4. Урок 4. Оператор SWITCH в Java.","entity_url":null,"active":true}}],"lesson":{"exercise":null,"units":[{"id":307,"name":"theory","url":"/courses/java_101/lessons/java_switch/theory_unit"},{"id":309,"name":"quiz","url":"/courses/java_101/lessons/java_switch/quiz_unit"}],"links":[],"ordered_units":[{"id":307,"name":"theory","url":"/courses/java_101/lessons/java_switch/theory_unit"},{"id":309,"name":"quiz","url":"/courses/java_101/lessons/java_switch/quiz_unit"}],"id":216,"slug":"java_switch","state":"approved","name":"Модуль 4. Урок 4. Оператор SWITCH в Java.","course_order":18,"goal":"Получить теоретические знания о операторе switch в Java и научится применять его на практике. В данном уроке представлена заключительная практика к модулю номер 3.","self_study":null,"theory_video_provider":"vimeo","theory_video_uid":"139446014","theory":"Команда выбора **switch** - осуществляет выбор из нескольких предложенных (альтернатива конструктору **else-if**). Значение переменной или выражения, стоящих после оператора **switch** вычисляется и после программа переходит только к одному из case блоков, значение которого совпадает с результатом вычисления.\n\n\tswitch (<выражение или переменная>) {\n\t\tcase <значение1>: // значение может быть таких типов: char, int, enum, String.\n\t\t\t// команда\n\t\t break; // передает управление к выходу из оператора switch, если такой отсутствует - далее выполняется следующий case. \n\n\t\tcase <значение2>:\n\t\t\t// команда\n\t\t break;\n\n\t\tdefault: // если ни один из case-ов не сработал, выполняется ветка default\n\t\tоператор;\n\t}\n\n## Ссылки для прочтения\n\n* [Тонкости оператора switch](https://habrahabr.ru/post/174065/)\n* Разъяснения операторов: [break, continue, return](http://developer.alexanderklimov.ru/android/java/break.php)\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/java_switch/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. Урок 4. Оператор SWITCH в Java.</h1><script type="application/ld+json">{"@context":"https://schema.org","@type":"LearningResource","name":"Модуль 4. Урок 4. Оператор SWITCH в 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/139446014" loading="lazy" allowFullScreen="" title="video"></iframe></div></div><div class="paywalled m_d08caa0 mantine-Typography-root"><p>Команда выбора <strong>switch</strong> - осуществляет выбор из нескольких предложенных (альтернатива конструктору <strong>else-if</strong>). Значение переменной или выражения, стоящих после оператора <strong>switch</strong> вычисляется и после программа переходит только к одному из case блоков, значение которого совпадает с результатом вычисления.</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">switch (<выражение или переменная>) {
case <значение1>: // значение может быть таких типов: char, int, enum, String.
// команда
break; // передает управление к выходу из оператора switch, если такой отсутствует - далее выполняется следующий case.
case <значение2>:
// команда
break;
default: // если ни один из case-ов не сработал, выполняется ветка default
оператор;
}</code>
<h2 id="heading-2-1">Ссылки для прочтения</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://habrahabr.ru/post/174065/" rel="noopener noreferrer" target="_blank">Тонкости оператора switch</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="http://developer.alexanderklimov.ru/android/java/break.php" rel="noopener noreferrer" target="_blank">break, continue, return</a></li>
</ul></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/java_switch/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/java_switch/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>