{"id":19411670,"url":"https://github.com/levvolkov/packagesandcycles","last_synced_at":"2025-06-24T14:41:13.858Z","repository":{"id":218957585,"uuid":"719529887","full_name":"levvolkov/packagesAndCycles","owner":"levvolkov","description":"5 «Пакеты и циклы» ","archived":false,"fork":false,"pushed_at":"2024-03-21T10:44:09.000Z","size":15,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-25T02:34:16.807Z","etag":null,"topics":["java"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/levvolkov.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-11-16T11:13:39.000Z","updated_at":"2025-02-02T16:10:36.000Z","dependencies_parsed_at":"2024-02-07T14:39:24.475Z","dependency_job_id":null,"html_url":"https://github.com/levvolkov/packagesAndCycles","commit_stats":null,"previous_names":["levvolkov/packagesandcycles"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/levvolkov/packagesAndCycles","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/levvolkov%2FpackagesAndCycles","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/levvolkov%2FpackagesAndCycles/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/levvolkov%2FpackagesAndCycles/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/levvolkov%2FpackagesAndCycles/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/levvolkov","download_url":"https://codeload.github.com/levvolkov/packagesAndCycles/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/levvolkov%2FpackagesAndCycles/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261695562,"owners_count":23195775,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["java"],"created_at":"2024-11-10T12:22:34.693Z","updated_at":"2025-06-24T14:41:13.797Z","avatar_url":"https://github.com/levvolkov.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 5. Домашнее задание к занятию «Пакеты и циклы»\n\n## Цель задания\n\n1. Научиться использовать циклы в программах.\n2. Уметь параметризировать юнит-тесты.\n3. Попрактиковаться с пакетированием классов.\n\n------\n\n## Инструкция к заданию\n\n1. Скачайте и установите профессиональный редактор кода [Intellij Idea Community Version](https://www.jetbrains.com/idea/download/).\n1. Откройте IDEA и [создайте и настройте новый Maven-проект](https://github.com/netology-code/javaqa-homeworks-video/blob/javaqa-55/QA_Maven_Idea_Create.md). Под каждую задачу следует создавать отдельный проект, если обратное не сказано в условии.\n2. Создайте пустой репозиторий на GitHub и свяжите его с папкой вашего проекта, а не с какой-либо другой.\n3. Правильно настройте репозиторий в плане `.gitignore`. Проигнорируйте папки `.idea` и `target` (раньше была `out`) и `.iml`-файл — их в репозитории быть не должно.\n4. Выполните в IDEA требуемую задачу согласно условию.\n5. Проверьте соблюдение [правил форматирования кода](https://github.com/netology-code/javaqa-homeworks-video/blob/javaqa-55/QA_Java_Idea_Format.md).\n6. Убедитесь, что при запуске `mvn clean test` все тесты запускаются, проходят, а сборка завершается успешно.\n7. Закоммитьте и отправьте в репозиторий содержимое папки проекта.\n\n------\n\n## Материалы, которые пригодятся для выполнения задания\n\n1. [Как создать Maven-проект в IDEA?](https://github.com/netology-code/javaqa-homeworks-video/blob/javaqa-55/QA_Maven_Idea_Create.md)\n1. [Как отформатировать код в Java?](https://github.com/netology-code/javaqa-homeworks-video/blob/javaqa-55/QA_Java_Idea_Format.md)\n\n------\n\n## Задание 1 — обязательное\n\nОдин фрилансер, воспользовавшись гибкостью графика своего вида работы, решил смоделировать свой отдых по следующей схеме:\n* изначально у него нет денег;\n* если он решает, что следующий месяц хочет активно поработать, то его деньги увеличиваются на `income`, доход от работы, и уменьшаются на `expense`, обязательные месячные траты;\n* если он решает, что следующий месяц хочет отдохнуть, то за месяц его деньги уменьшаются на `expense`, а затем остаток накоплений ещё уменьшается в три раза — траты на отдых;\n* решение, отдохнуть ли в следующем месяце принимается по правилу: если на счету есть хотя бы `threshold` денег, то выбираем отдых, иначе — работу.\n\nВам нужно написать сервисный класс с методом, который по заданным `income`, `expenses` и `threshold` рассчитает количество месяцев отдыха, которые будут в следующий год. Всё считается в целых числах. Сервисный класс должен быть в пакете `ru.netology.services`, как и тест-класс на него.\n\nНапример, если `income` 10 тысяч руб., `expenses` 3 тысячи руб., `threshold` 20 тысяч руб., то отдохнуть удастся три месяца в году согласно следующей эмуляции планируемого поведения:\n```text\nМесяц 1. Денег 0. Придётся работать. Заработал +10000, потратил -3000\nМесяц 2. Денег 7000. Придётся работать. Заработал +10000, потратил -3000\nМесяц 3. Денег 14000. Придётся работать. Заработал +10000, потратил -3000\nМесяц 4. Денег 21000. Буду отдыхать. Потратил -3000, затем ещё -12000\nМесяц 5. Денег 6000. Придётся работать. Заработал +10000, потратил -3000\nМесяц 6. Денег 13000. Придётся работать. Заработал +10000, потратил -3000\nМесяц 7. Денег 20000. Буду отдыхать. Потратил -3000, затем ещё -11334\nМесяц 8. Денег 5666. Придётся работать. Заработал +10000, потратил -3000\nМесяц 9. Денег 12666. Придётся работать. Заработал +10000, потратил -3000\nМесяц 10. Денег 19666. Придётся работать. Заработал +10000, потратил -3000\nМесяц 11. Денег 26666. Буду отдыхать. Потратил -3000, затем ещё -15778\nМесяц 12. Денег 7888. Придётся работать. Заработал +10000, потратил -3000\n```\n\nА на примере `income` 100 тысяч руб., `expenses` 60 тысяч руб., `threshold` 150 тысяч руб. ответ будет 2:\n```text\nМесяц 1. Денег 0. Придётся работать. Заработал +100000, потратил -60000\nМесяц 2. Денег 40000. Придётся работать. Заработал +100000, потратил -60000\nМесяц 3. Денег 80000. Придётся работать. Заработал +100000, потратил -60000\nМесяц 4. Денег 120000. Придётся работать. Заработал +100000, потратил -60000\nМесяц 5. Денег 160000. Буду отдыхать. Потратил -60000, затем ещё -66667\nМесяц 6. Денег 33333. Придётся работать. Заработал +100000, потратил -60000\nМесяц 7. Денег 73333. Придётся работать. Заработал +100000, потратил -60000\nМесяц 8. Денег 113333. Придётся работать. Заработал +100000, потратил -60000\nМесяц 9. Денег 153333. Буду отдыхать. Потратил -60000, затем ещё -62222\nМесяц 10. Денег 31111. Придётся работать. Заработал +100000, потратил -60000\nМесяц 11. Денег 71111. Придётся работать. Заработал +100000, потратил -60000\nМесяц 12. Денег 111111. Придётся работать. Заработал +100000, потратил -60000\n```\n\nПри реализации вашего сервисного метода можете опираться на пример реализации другого сервиса, считающего, сколько месяцев в году отдыхал работник, который в месяц отдыха теряет `expenses` денег, а в месяц работы получает `income` денег, а отдыхает каждый раз, когда денег хватает на следующий месяц:\n\n```java\n    public int calculate(int income, int expenses) {\n        int count = 0; // счётчик месяцев отдыха\n        int money = 0; // количество денег на счету\n        for (int month = 0; month \u003c 12; month++) {\n            if (money \u003e= expenses) { // можем ли отдыхать?\n                count++; // увеличиваем счётчик месяцев отдыха\n                money = money - expenses;\n            } else {\n                money = money + income;\n            }\n        }\n        return count;\n    }\n```\n\nПротестируйте ваш сервис на примерах из условия.\n\n------\n\n## Правила приёма работы\n\nПрикреплена одна ссылка на первую или обе задачи сразу.\n\n------\n\n## Критерии оценки\n\n1. В каждом репозитории размещено содержимое папки проекта IDEA. Корнем репозитория должна быть именно папка проекта — не папка `src`, не папка, внутри которой лежит папка проекта. Таким образом, в корне репозитория должна лежать сразу папка `src`.\n1. Есть файл `.gitignore`, игнорирующий ненужные файлы и папки, которые должны отсутствовать в репозитории. Если они присутствуют, их нужно оттуда удалить.\n1. Программа соответствует всем требованиям из условия задачи.\n1. Программа использует только те инструменты языка, которые мы проходили или которые прямо разрешены условием задачи.\n1. Программа работает правильно на всех примерах из условия.\n1. Программный код отформатирован и соответствует пройденным требованиям к качеству кода.\n1. При запуске `mvn clean test` тесты запускаются и проходят, а сборка завершается успешно.\n1. Программа спроектирована достаточно логично и правильно, не противоречит общепринятым в производстве практикам и традициям.\n1. При наличии недочётов, в зависимости от их серьёзности и количества, работа может быть отправлена на доработку или принята — решение принимается на основе экспертной оценки работы.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flevvolkov%2Fpackagesandcycles","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flevvolkov%2Fpackagesandcycles","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flevvolkov%2Fpackagesandcycles/lists"}