电梯调度算法设计(java) (2)建筑内部设有4部电梯,编号为1,2,3,4。 (3)中间两部即2,3号电梯外部有25个按钮,编号为-1,1,2,3,4……24。外侧两部电梯即1,4号电梯外部有11个按钮,,编号为-1,1,2,3,4……10。 (4)1,4号电梯设置为联动模式,2,3号两部电梯设置为联动模式。(同时呼叫) (5)不考虑重量和乘客,不考虑电梯容量等实际问题 仅简单算法 (6)不考虑电梯内部按钮 仅实现外部按钮 (7)不考虑开关门 算法包含 同一方向的运行时,优先考虑最近的楼层 (8)使用可视化运行操作GUI(其中1,4号电梯(外侧两部)有11个按钮,2,3号电梯(中间两部)有25个按钮,每个按钮都可以呼叫电梯,每部电梯上方添加标签显示电梯当前在第几层,并且显示电梯当前的运行状态) (写出代码 包括每一行的注释) 输入()号电梯的()层用户呼叫了电梯 输出包括:()号电梯的()层用户呼叫了电梯,电梯当前楼层,运行状态为()
时间: 2024-01-31 21:01:41 浏览: 101
对于电梯调度算法的设计,可以使用以下的Java代码实现:
```java
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class ElevatorScheduler extends JFrame implements ActionListener {
private JButton[][] buttons; // 存储电梯按钮的数组
private JLabel[] labels; // 存储电梯当前楼层的标签
private String[] statuses; // 存储电梯当前运行状态的数组
public ElevatorScheduler() {
buttons = new JButton[4][];
buttons[0] = new JButton[11];
buttons[1] = new JButton[25];
buttons[2] = new JButton[25];
buttons[3] = new JButton[11];
labels = new JLabel[4];
statuses = new String[4];
// 设置窗口布局为GridLayout
setLayout(new GridLayout(4, 1));
// 初始化按钮和标签
for (int i = 0; i < 4; i++) {
JPanel panel = new JPanel();
panel.setLayout(new FlowLayout());
for (int j = 0; j < buttons[i].length; j++) {
buttons[i][j] = new JButton(Integer.toString(j - 1));
buttons[i][j].addActionListener(this);
panel.add(buttons[i][j]);
}
labels[i] = new JLabel("Floor: 1");
panel.add(labels[i]);
add(panel);
}
// 初始化运行状态
statuses[0] = "Stopped";
statuses[1] = "Stopped";
statuses[2] = "Stopped";
statuses[3] = "Stopped";
// 设置窗口属性
setTitle("Elevator Scheduler");
setSize(400, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public void actionPerformed(ActionEvent e) {
// 获取点击的按钮
JButton button = (JButton) e.getSource();
// 遍历按钮数组,确定点击的是哪个电梯的按钮
for (int i = 0; i < buttons.length; i++) {
for (int j = 0; j < buttons[i].length; j++) {
if (buttons[i][j] == button) {
int floor = j - 1;
int elevator = i + 1;
// 输出电梯呼叫信息和当前状态
System.out.println("Elevator " + elevator + " called from floor " + floor);
System.out.println("Current floor: " + labels[i].getText());
System.out.println("Status: " + statuses[i]);
// 更新电梯标签显示的楼层
labels[i].setText("Floor: " + (floor + 1));
// 更新电梯运行状态
statuses[i] = "Running";
// 模拟电梯运行的过程
try {
Thread.sleep(2000); // 假设每层楼需要2秒的时间
} catch (InterruptedException ex) {
ex.printStackTrace();
}
// 更新电梯运行状态为停止
statuses[i] = "Stopped";
// 输出电梯到达目标楼层的信息
System.out.println("Elevator " + elevator + " arrived at floor " + (floor + 1));
System.out.println("Current floor: " + labels[i].getText());
System.out.println("Status: " + statuses[i]);
return;
}
}
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new ElevatorScheduler();
}
});
}
}
```
这段代码使用了Java的Swing库,实现了一个简单的GUI界面,包含了电梯按钮和电梯当前楼层标签。每当点击某个电梯的按钮时,会输出电梯呼叫信息和当前状态,并模拟电梯运行的过程。你可以根据需要进行进一步的修改和完善。
阅读全文