Skip to content

StepanMe/Elevators

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Задание

В здании 9 этажей и 3 лифта, которые вызываются одной кнопкой. На первом всегда должен быть свободный лифт. По нажатию на кнопку на любом этаже должен приехать лифт, расположенный наиболее близко.

Алгоритм необходмио реализовать на любом популярном объектно-ориентированном языке программирования.

Как я реализовал алгоритм?

Алгоритм реализован на Java в виде консольного приложения.

Если вы знаете другой (возможно, более простой) способ реализации, напишите в Issues

Входные данные:

  • номер этажа, на который нужно вызвать лифт,
  • номер этажа, на который поедет лифт.

Выходные данные:

  • На каком этаже находится каждый из лифтов,
  • Название лифта, который приедет.

Как это работает, если вкратце?

По умолчанию все лифты на первом этаже. В начале каждой поездки пользователь вводит номера этажей, куда вызвать лифт и куда лифт поедет.

Определяется ближайший лифт с учётом того, что на первом этаже один лифт должен остаться. После поездки запоминаем, куда лифт приехал — это будет учитываться при следующей поездке, если пользователь на неё согласится (напишет что-то кроме "нет"). Выводится информация о том, какой лифт приедет.

Кататься можно бесконечно, пока пользователь не ответит "нет".

Как работает, если подробнее?

В программе создаём исходный список лифтов из трёх объектов класса ElevatorelevatorList. У каждого лифта есть поля:

  • идентификатор (0...2),
  • название (№1, №2, №3),
  • текущий этаж.

На начале каждой поездки пользователь должен ввести корректные (числа в диапазоне от 1 до 9 включительно) номера этажей, «откуда» и «куда» поедет лифт.

Из исходного списка лифтов создаём список «подходящих» лифтов — suitableElevators. Считаем, сколько в нём лифтов, которые находятся на первом этаже, через getCurrentFloor.

Если на первом этаже:

  • три лифта: берём первый из списка (т.к. нам без разницы, какой лифт поедет). Запоминаем его ID.
  • два лифта: сортируем список в порядке возрастания значения свойства "текущий этаж" (currentFloor). В получившемся списке пропускаем первый элемент, тем самым оставляя "один из лифтов на первом этаже" и "лифт на каком-то ещё этаже". Определяем, какой лифт находится ближе, через distanceToTheFloor(«откуда»). Запоминаем его ID.
  • один лифт: убираем его из списка. Определяем, какой лифт находится ближе, через distanceToTheFloor(«откуда»). Запоминаем его ID.

В исходном списке у лифта с идентификатором, равным ID, обновляем значение текущего этажа через setCurrentFloor(«куда»). Теперь оно равно «куда», которое ввёл пользователь. Это пригодится при следующей поездке.

Выводим информацию, какой лифт приедет.

Спрашиваем, будет ли ещё одна поездка.

Результат работы программы

На какой этаж вызвать лифт? s
Нажмите кнопку с цифрой от 1 до 9: 0
Нажмите кнопку с цифрой от 1 до 9: 10
Нажмите кнопку с цифрой от 1 до 9: 8
На какой этаж поедем? h
Нажмите кнопку с цифрой от 1 до 9: 0
Нажмите кнопку с цифрой от 1 до 9: 10
Нажмите кнопку с цифрой от 1 до 9: 9

Лифт №1 сейчас на 1-м этаже, до вас ему ехать 7 эт.
Лифт №2 сейчас на 1-м этаже, до вас ему ехать 7 эт.
Лифт №3 сейчас на 1-м этаже, до вас ему ехать 7 эт.
К вам приедет лифт №1
Едем дальше? (да/нет) да

************** Новая поездка в лифте **************
На какой этаж вызвать лифт? 8
На какой этаж поедем? 2

Лифт №1 сейчас на 9-м этаже, до вас ему ехать 1 эт.
Лифт №2 сейчас на 1-м этаже, до вас ему ехать 7 эт.
Лифт №3 сейчас на 1-м этаже, до вас ему ехать 7 эт.
К вам приедет лифт №1
Едем дальше? (да/нет) да

************** Новая поездка в лифте **************
На какой этаж вызвать лифт? 2
На какой этаж поедем? 6

Лифт №1 сейчас на 2-м этаже, до вас ему ехать 0 эт.
Лифт №2 сейчас на 1-м этаже, до вас ему ехать 1 эт.
Лифт №3 сейчас на 1-м этаже, до вас ему ехать 1 эт.
К вам приедет лифт №1
Едем дальше? (да/нет) да

************** Новая поездка в лифте **************
На какой этаж вызвать лифт? 5
На какой этаж поедем? 7

Лифт №1 сейчас на 6-м этаже, до вас ему ехать 1 эт.
Лифт №2 сейчас на 1-м этаже, до вас ему ехать 4 эт.
Лифт №3 сейчас на 1-м этаже, до вас ему ехать 4 эт.
К вам приедет лифт №1
Едем дальше? (да/нет) да

************** Новая поездка в лифте **************
На какой этаж вызвать лифт? 2
На какой этаж поедем? 8

Лифт №1 сейчас на 7-м этаже, до вас ему ехать 5 эт.
Лифт №2 сейчас на 1-м этаже, до вас ему ехать 1 эт.
Лифт №3 сейчас на 1-м этаже, до вас ему ехать 1 эт.
К вам приедет лифт №3
Едем дальше? (да/нет) нет

Process finished with exit code 0

About

Алгоритм управления лифтами на Java

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published