因此,对于这项任务,我必须模拟电梯。 现在,我生成3个人,他们在一个随机的楼层上产生并且有一个随机的目的地楼层。 我有一台电梯可以把它们拿起并带上它们。 我遇到的问题是电梯一次可以处理1个人。 我不知道怎么做才能让电梯停在人们路上的地板上。 例如:
人1的起始楼层是3,并且是8 人2的起始楼层是9,并且是10 人3的起始楼层是6,并且要到9
目前的工作方式,电梯到3,然后到8,没有在第6层停在第3层。我不知道如何解决这个问题。
电梯在楼层之间移动的代码如下:
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){}
}
对此的任何帮助都会很棒。 感谢
答案 0 :(得分:1)
想一想:
当您的电梯在地板旁边时,检查那里是否有人。如果是,请打开门,如果没有,请跳到下一层。
将所有人送到他们的楼层后,前往最近的楼层,那里有一个人叫电梯。
答案 1 :(得分:0)
好像你把moveTo(task.getDestination());
置于错误的位置。
它应该在synchronized块中以及你的任务获取行为,否则它仍然可能多线程会调用你的moveTo方法。
希望它能帮助你!