Elevator program code challenge, revised:
Can someone please critique my Elevator problem - I wanted to use OOP principles and coding standards. Also, does logic make sense?
internal enum Status
{
GoingUp,
GoingDown,
Stopped
}
internal class Elevator
{
private readonly SortedList<int, bool> _sorted = new SortedList<int, bool>();
public readonly int TopFloor;
public Elevator(int topFloor)
{
TopFloor = topFloor;
}
public int CurrentFloor { get; set; } = 1;
public Status Status { get; set; } = Status.Stopped;
public void AddRequest(int floor)
{
if (!_sorted.ContainsKey(floor))
_sorted.Add(floor, false);
switch (Status) {
case Status.GoingDown:
MoveDown();
break;
case Status.Stopped:
if (CurrentFloor < floor)
MoveUp();
else
MoveDown();
break;
case Status.GoingUp:
MoveUp();
break;
default:
break;
}
}
public void MoveUp()
{
var max = _sorted.OrderByDescending(x => x.Key).First();
for (var i = CurrentFloor; i <= max.Key; i++) // Go to top most requested floor
if (_sorted.ContainsKey(i))
Stop(i);
else
continue;
Status = Status.Stopped;
}
public void MoveDown()
{
var min = _sorted.OrderBy(x => x.Key).First();
for (var i = CurrentFloor; i >= min.Key; i--)
if (_sorted.ContainsKey(i))
Stop(i);
else
continue;
Status = Status.Stopped;
}
public void Stop(int floor)
{
_sorted.Remove(floor);
CurrentFloor = floor;
Console.WriteLine("Stopped at: {0}", CurrentFloor);
}
}
internal class Manager
{
private readonly Elevator _elevator = new Elevator(10);
public void ButtonPressed(int floor)
{
// testing...
_elevator.AddRequest(10);
_elevator.AddRequest(10);
_elevator.AddRequest(5);
_elevator.AddRequest(2);
_elevator.AddRequest(9);
_elevator.AddRequest(6);
}
}