그래서이 과제에서 엘리베이터를 시뮬레이트해야합니다. 지금은 임의의 층에서 스폰되고 임의의 대상 층을 가진 3 명의 사람들을 생성합니다. 나는 그들을 태우고 가져 오는 엘리베이터가 1 대 있습니다. 내가 가진 문제는 엘리베이터가 한 번에 한 사람을 처리한다는 것입니다. 나는 엘리베이터를 타고 도중에 사람들과 마루에 멈추는 방법을 모릅니다. 예 :자바 동시 실행으로 인해 가까운 층에 엘리베이터가 있습니다.
이용시 1의 시작 층이 3이고 가고있다8 이용시 2의 개시 층 (9)이며, (10)에 가고 이용시 3의 시작 층이 6이고, 9
방법 그것에 가고 현재 작동 중입니다. 엘리베이터가 3으로 이동 한 다음 8로 이동합니다. 3 층의 6 층에서 멈추지 않고이 문제를 해결할 수 있는지 잘 모르겠습니다.
층 사이를 이동하는 엘리베이터의 코드는 다음과 같다 :
public void moveTo(int floor) throws InterruptedException
{
int distance;
synchronized(this)
{
distance = Math.abs(currentFloor - floor);
System.out.println(name + " is on floor " + currentFloor + " moving to " + floor);
}
Thread.sleep(1000 * distance);
synchronized(this)
{
currentFloor = floor;
}
}
그리고 엘리베이터의 주요 run() 메소드는 이것이다 :
이public void run()
{
try
{
for(;;)
{
ElevatorTask task;
synchronized(this)
{
while(next_task == null)
wait();
task = next_task;
next_task = null;
notify();
}
moveTo(task.getDestination());
}
}
catch(InterruptedException ex){}
}
이에 어떤 도움이 좋을 것 . 감사합니다 그냥 생각
목적지는 어떻게 주문됩니까? 6과 9에서 멈출 필요가있는 경우, 현재 3시에 있다는 사실을 기반으로 6시에 중단하기로 결정할 논리는 어디에 있습니까? 즉, "getDestination"은 무엇입니까? –
나는 Elevator가 ElevatorMotionState : STOPPED, MOVING에 의해 설명 된 것을 상상한다. ElevatorDirectionState : HEADING_UP, HEADING_DOWN뿐만 아니라 위치에 대한 이중 값을가집니다. 필자는 바닥에 대한 요청을 받아들이는 ElevatorControl, 올라가거나 내려가는 요청을 받아들이라는 요청을 받아 들여 이러한 요청이 어떤 유형의 대기열 (정렬 된 대기열, 층별로 분류 됨)에 배치 될 것이라고 생각합니다. –
무한 대기 시간을 피하는이 공정한 알고리즘은 사실 다소 복잡한 문제입니다. – Voo