Помощь симулятора лифта в Java

Вопрос: У меня проблемы с подготовкой базового симулятора лифта в Java. То, что я до сих пор, является вариантом, который позволяет пользователю вводить, хотят ли они выбрать пол, вытащить пожарную сигнализацию или выйти из симуляции. Когда они выбирают выбранный пол, они могут выбирать любой этаж от 1 до 100, за исключением 13. Что я не

Вопрос:

У меня проблемы с подготовкой базового симулятора лифта в Java. То, что я до сих пор, является вариантом, который позволяет пользователю вводить, хотят ли они выбрать пол, вытащить пожарную сигнализацию или выйти из симуляции. Когда они выбирают выбранный пол, они могут выбирать любой этаж от 1 до 100, за исключением 13. Что я не могу понять, как сделать, это заставить симуляцию отслеживать их текущий пол, чтобы они могли опуститься. Это то, что у меня есть до сих пор:

public class Elevator { public Elevator() {} public void selectFloor() { Scanner scnr = new Scanner(System.in); int newFloor; System.out.println(«Enter the floor you’d like to go to ==> «); newFloor = scnr.nextInt(); if (newFloor > 100 || newFloor < 0 || newFloor == 13) { System.out.println(«Invalid selection»); } else if (newFloor <= 100 && newFloor > 0 && newFloor != 13) { for (int i = 1; i <= newFloor; i++) System.out.println(«…» + i); System.out.println(«Ding!»); } } public void fireAlarm() { System.out.println(«Danger, you must exit the building now!»); } }

Кроме того, было бы полезно опубликовать мой другой класс для этой программы?

Лучший ответ:

У Elevator должно быть поле currentFloor, например:

private int currentFloor;

Затем, в selectFloor, вам нужно найти направление. Кроме того, в selectFloor else if необходимости.

public class Elevator { private int currentFloor; public Elevator() { currentFloor = 0; } public void selectFloor() { Scanner scnr = new Scanner(System.in); int newFloor; System.out.println(«Enter the floor you’d like to go to ==> «); newFloor = scnr.nextInt(); if (newFloor > 100 || newFloor < 0 || newFloor == 13) { System.out.println(«Invalid selection»); } else { // The if was not necessary int direction = 0; if(currentFloor < newFloor){ direction = 1; // going up; } else if (currentFloor > newFloor) { direction = -1; //going down; } else { direction = 0; //going nowhere; } for (; currentFloor != newFloor; currentFloor += newFloor) System.out.println(«…» + i); System.out.println(«Ding!»); } } public void fireAlarm() { System.out.println(«Danger, you must exit the building now!»); } }

Примечание. Я еще не тестировал это, поэтому я не могу быть уверен, что это правильно.

Ответ №1

Каждое нажатие кнопки приводит к запросу лифта, который должен быть подан. Каждый из этих запросов отслеживается на глобальном уровне. ElevatorRequests – класс, который хранит запросы на лифты, может использовать различные стратегии для планирования запросов на лифте. Лифт управляется классом контроллера, который мы называем ElevatorController. Контроллер лифта инструктирует лифт, что делать, а также может выключить/запустить лифт здания. Контроллер лифта считывает следующий запрос на лифте, который обрабатывается и обслуживает его.

Кнопка – абстрактный класс, определяющий общее поведение, например, подсветка, doNotIlluminate. FloorButton, ElevatorButton расширяет тип кнопки и определяет placeRequest(), который вызывается при нажатии кнопки. Нажатие кнопок на полу и кнопка лифта позволяют добавлять запросы в обычное место.

ElevatorController запускает шоу, читая следующий запрос для обработки и инструктирования лифта, что делать.

Ответ №2

Дайте вашему Elevator объект переменной класса, добавив private int floor; непосредственно под тегом открытия класса. (Над конструктором класса Elevator.) Эта переменная будет привязана непосредственно к элементу Лифт, который его содержит.

Таким образом, когда вы создаете свой Лифт с помощью new Elevator у вас также будет значение int, всегда доступное для удержания пола. Чтобы получить доступ к этому значению, создайте метод getter и setter. Они должны выглядеть так:

public void setFloor(int floor) { this.floor = floor; } public int getFloor() { return floor; }

Затем вы можете вызвать эти два метода, чтобы установить номер пола и получить номер пола. Чтобы отслеживать, в вашем методе selectFloor вам нужно будет использовать setFloor и передать ему номер пола после действительного выбора. Затем вы можете использовать getFloor, чтобы определить, будет ли он идти вверх или вниз.

Чтобы ваш конструктор установил переменную floor в 1, когда создан новый объект Лифт. Просто измените конструктор таким образом:

public Elevator() { setFloor(1); }

Надеюсь это поможет! Если у вас есть какие-либо вопросы о том, как эти вещи работают, дайте мне знать, я постараюсь предоставить более подробную информацию.

Ответ №3

Я только что вставил новый метод под названием backToBasement() и привязал его к вашему методу selectFloor(). Надеюсь, что это будет полезно.

public void selectFloor() { Scanner scnr = new Scanner(System.in); int newFloor; System.out.println(«Enter the floor you’d like to go to ==> «); newFloor = scnr.nextInt(); if (newFloor > 100 || newFloor < 0 || newFloor == 13) { System.out.println(«Invalid selection»); } else if (newFloor <= 100 && newFloor > 0 && newFloor != 13) { for (int i = 1; i <= newFloor; i++) System.out.println(«…» + i); System.out.println(«Ding!»); backToBasement(newFloor); } } public void fireAlarm() { System.out.println(«Danger, you must exit the building now!»); } public void backToBasement(int newFloor){ for (int i=newFloor; i>0;i—){ System.out.println(«…» + i); } System.out.println(«Ding!… Back to Ground Level»); }

Оцените статью
Добавить комментарий