亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? main.java

?? 使用java語言實現的elevator模擬程序
?? JAVA
字號:
package main;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import lifter.Lifter;
import lifter.Request;
import java.awt.*;

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class Main extends JFrame implements ActionListener {//function: main,entry of the program
	private static Container[] container;//容器用于建立圖形時用

	private static int row;//行,大樓的高度。

	private static int column;//電梯的數目。

	public static Request receiverequest;//外部發出的請求。

	public static Lifter[] lifters;//生成的電梯,此時沒有初始化。

	public static Lifter choosedLifter = null;//選中的電梯,調度的時候用。

	
	public class Request {
		public List<Integer> requestedFloor= (List)new java.util.ArrayList<Integer>(); ;
		public int floorSentRequest;
		public int upordown;
	}
	

	

	public static void main(String[] args) {//入口函數。

		// Promt the user to enter the number of the lift
		String rowString = JOptionPane.showInputDialog(null, "請輸入樓層數", "輸入",
				JOptionPane.QUESTION_MESSAGE);

		// Promt the user to enter the number of the elevator
		String columnString = JOptionPane.showInputDialog(null, "請輸入電梯數", "輸入",
				JOptionPane.QUESTION_MESSAGE);

		
		try {
			row = Integer.parseInt(rowString);//從對話框中獲得大樓的高度和電梯的數目。
			column = Integer.parseInt(columnString);

			

			container = new Container[column + 2];//用于界面的布局。
			for (int iii = 0; iii <column + 2; iii++) {
				container[iii] = new Container();
			}

			Main m = new Main();//設置界面。
			m.setTitle("歡迎使用電梯系統");
			m.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			m.setVisible(true);

			container[0] = m.getContentPane();
			container[0].setLayout(new GridLayout(1, column + 1, 5, 5));
			container[1].setLayout(new GridLayout(row, 3, 5, 5));
			container[0].add(container[1]);
			for(int ii = 2; ii < column + 2; ii ++){
				container[ii].setLayout(new GridLayout(1, row, 5, 5));
				container[0].add(container[ii]);
			}
			/*container[2].setLayout(new GridLayout(row, 2, 5, 5));
			container[3].setLayout(new GridLayout(1, column, 5, 5));
			container[0].add(container[1]);
			container[0].add(container[2]);
			container[0].add(container[3]);*/

			// Set GirdLayout,gaps 5 between compontent horizontally and vertically

			// Add buttons to frame

			for (int i = row; i >= 1; i--) {//增加外部請求的按鈕。	
				JLabel b = new JLabel("        " + i);
				container[1].add(b);
				
				//JButton a = new JButton("up " + i);
				//JButton a = new JButton("∧");
				JButton a = new JButton("up " + i);
				a.addActionListener(m);//每個按鈕的listener為m
				container[1].add(a);

				//JButton aa = new JButton("down " + i);//增加外部請求的按鈕。
				//JButton aa = new JButton("∨");
				JButton aa = new JButton("down " + i);
				aa.addActionListener(m);
				container[1].add(aa);
			}

			lifters = new Lifter[column];//電梯的初始化。電梯的繪制也在這里進行。
			for (int ii = 0; ii < column; ii++) {
				lifters[ii] = new Lifter(row, 0, 0, container[ii + 2]);
			}

			for (int i = 0; i < lifters.length; i++) {
				new Thread(lifters[i]).start();//讓新繪制的電梯啟動
			}
		} catch (NumberFormatException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	public synchronized void actionPerformed(ActionEvent e) {//外部請求得主響應函數。

		String estr = e.getActionCommand();
		if (estr.charAt(0) == 'u' ||estr.charAt(0) == 'd') {
			//if (estr.equals("up") == true ||estr.equals("down") == true) {
			receiverequest = new Request();
			receiverequest.floorSentRequest = Integer.parseInt(estr
					.substring(estr.indexOf(" ") + 1));
			if (estr.charAt(0) == 'u')
				//if (estr.equals("up") == true)
				receiverequest.upordown = 1;
			if (estr.charAt(0) == 'd')
				//if (estr.equals("down") == true)	
			    receiverequest.upordown = -1;

			choosedLifter = chooseLifter(lifters, receiverequest);// 從電梯中選者一部電梯,如果沒有符合條件的電梯就返回空.

			if (choosedLifter != null) { // 如果返回為空,即當前沒有電梯符合條件,當前請求就被忽視
				choosedLifter.printDest();//輸出destFloors的狀態。
				if ((receiverequest.upordown == 1&&choosedLifter.currentFloor<receiverequest.floorSentRequest)||(receiverequest.upordown==-1&&choosedLifter.currentFloor<receiverequest.floorSentRequest)) {
					choosedLifter.addDestUp(new Integer(
							receiverequest.floorSentRequest));// 往選中的電梯目標隊列當中添加receiverequest.floorsentrequest
					choosedLifter.moveState=1;
				}else if((receiverequest.upordown==-1&&choosedLifter.currentFloor>receiverequest.floorSentRequest)||(receiverequest.upordown == 1&&choosedLifter.currentFloor>receiverequest.floorSentRequest)){
					choosedLifter.addDestDown(new Integer(receiverequest.floorSentRequest));
					choosedLifter.moveState=-1;
				}
				choosedLifter.printDest();
				if (choosedLifter.flag == 1) { // 如果當前電梯可以開啟的話就開啟,不能開啟意味著此電梯已經開啟。對已經開啟的電梯只需要讓他跑完就可以了。
					// flag為0的情況是:電梯已經開啟,下一個請求還是選中了這部電梯,
					new Thread(choosedLifter).start();

					choosedLifter.flag = 0; // 當電梯隊列里的成員都被跑完后,flag會改為1
				}
			}
			// System.out.println("5");
			receiverequest = null;
		}

	}

	public static synchronized Lifter chooseLifter(Lifter[] l,
			Request receiverequest) {// 選者電梯
		Lifter choosedLifter = null;
		int temp, temp2;

		if (receiverequest != null) {
			if (receiverequest.upordown == 1) {//向上的話就從該樓層以下的電梯里選者同向的電梯。
				try {
					temp = Math.abs(receiverequest.floorSentRequest
							- l[0].currentFloor);
					for (int i = 0; i < l.length; i++) {
						if (l[i].currentFloor <= receiverequest.floorSentRequest
								&& l[i].moveState == receiverequest.upordown) {
							if (temp >= Math
									.abs(receiverequest.floorSentRequest
											- l[i].currentFloor)) {
								choosedLifter = l[i];
								temp = Math.abs(receiverequest.floorSentRequest
										- l[i].currentFloor);
							}
						}
					}
				} catch (Exception e) {
				} finally {
					if (choosedLifter == null) {//如果沒有找到合適的就從靜止的電梯中找離它最近的,再沒有找到的話就忽視該請求
						temp2 = Math.abs(receiverequest.floorSentRequest
								- l[0].currentFloor);
						for (int j = 0; j < l.length; j++) {
							if (l[j].moveState == 0) {
								if (temp2 >= Math
										.abs(receiverequest.floorSentRequest
												- l[j].currentFloor)) {
									choosedLifter = l[j];
									temp2 = Math
											.abs(receiverequest.floorSentRequest
													- l[j].currentFloor);
								}
							}
						}
					}
				}
			}
			if (receiverequest.upordown == -1) {//向下的話就從該樓層以上的電梯里選者同向的電梯。
				try {
					temp = Math.abs(l[0].currentFloor
							- receiverequest.floorSentRequest);
					for (int i = 0; i < l.length; i++) {
						if (l[i].currentFloor >= receiverequest.floorSentRequest
								&& l[i].moveState == receiverequest.upordown) {
							if (temp >= l[i].currentFloor
									- receiverequest.floorSentRequest) {
								choosedLifter = l[i];
								temp = l[i].currentFloor
										- receiverequest.floorSentRequest;
							}
						}
					}
				} catch (Exception e) {
				} finally {
					if (choosedLifter == null) {//如果沒有找到合適的就從靜止的電梯中找離它最近的。
						temp2 = Math.abs(receiverequest.floorSentRequest
								- l[0].currentFloor);
						for (int j = 0; j < l.length; j++) {
							if (l[j].moveState == 0) {
								if (temp2 >= receiverequest.floorSentRequest
										- l[j].currentFloor) {
									choosedLifter = l[j];
									temp2 = receiverequest.floorSentRequest
											- l[j].currentFloor;
								}
							}
						}
					}
				}
			}
		}
		return choosedLifter;//返回選中的電梯。
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品一区二区三区在线播放| 色婷婷狠狠综合| 亚洲国产sm捆绑调教视频| 亚洲天堂a在线| 亚洲欧洲精品一区二区精品久久久| 国产亚洲精品免费| 国产午夜久久久久| 国产精品嫩草99a| 综合久久综合久久| 亚洲永久精品国产| 日韩成人av影视| 美女一区二区久久| 国产又黄又大久久| 国产91在线观看丝袜| 成人黄色大片在线观看| 91小视频免费观看| 欧美久久婷婷综合色| 日韩一区二区视频在线观看| 久久综合国产精品| 亚洲欧洲色图综合| 日韩av成人高清| 国产不卡高清在线观看视频| 91伊人久久大香线蕉| 欧美男女性生活在线直播观看| 91精品一区二区三区久久久久久| 国产日产欧美一区二区视频| 国产精品免费aⅴ片在线观看| 亚洲精品ww久久久久久p站| 视频一区二区欧美| 成人免费视频一区二区| 欧美在线观看视频一区二区| 欧美日韩精品综合在线| 国产婷婷一区二区| 午夜精品久久久久久久久久久| 黄色精品一二区| 在线视频欧美区| 欧美r级电影在线观看| 亚洲精品视频一区二区| 黑人巨大精品欧美黑白配亚洲| 91久久一区二区| 欧美成人精精品一区二区频| 一区二区三区精品视频在线| 美女在线观看视频一区二区| 91天堂素人约啪| 国产夜色精品一区二区av| 亚洲午夜羞羞片| 99精品黄色片免费大全| 欧美哺乳videos| 五月婷婷久久丁香| 一本一道久久a久久精品综合蜜臀| 日韩精品一区二区三区在线观看| 一区二区三区精品久久久| 国产 欧美在线| 久久综合色一综合色88| 午夜国产精品一区| 在线观看日韩国产| 中文字幕日韩欧美一区二区三区| 久久99国产精品麻豆| 欧美精品久久天天躁| 亚洲欧美一区二区三区国产精品| 精品在线播放免费| 在线不卡的av| 亚洲va韩国va欧美va精品| 日本韩国视频一区二区| 国产精品久久看| 国产成人av一区二区三区在线观看| 欧美一区二区网站| 亚洲6080在线| 欧美日韩中文精品| 亚洲一区视频在线| 欧美日韩精品三区| 亚洲国产精品视频| 欧美日韩不卡一区| 丝袜美腿高跟呻吟高潮一区| 欧美日韩视频在线一区二区| 亚洲午夜久久久久久久久电影网 | 亚洲午夜在线观看视频在线| 色综合久久精品| 亚洲自拍偷拍图区| 欧美亚洲综合一区| 亚洲国产精品一区二区www在线| 99精品偷自拍| 亚洲三级免费观看| 欧美三级中文字幕| 全国精品久久少妇| 精品少妇一区二区三区免费观看 | av欧美精品.com| 亚洲欧美一区二区三区孕妇| 色老汉一区二区三区| 亚洲第一二三四区| 日韩欧美123| 另类中文字幕网| 国产午夜三级一区二区三| 99国产精品国产精品久久| 一区二区三区欧美久久| 欧美久久一区二区| 国产精品一品视频| 日韩一区在线看| 欧洲一区二区三区免费视频| 亚洲不卡一区二区三区| 精品国产91久久久久久久妲己| 国产一区二区三区免费播放| 亚洲欧洲日韩在线| 7777女厕盗摄久久久| 国产激情一区二区三区四区| 一区二区三区中文字幕在线观看| 91精品国产乱| 99久久99久久免费精品蜜臀| 视频一区中文字幕国产| 亚洲国产精品ⅴa在线观看| 色偷偷久久人人79超碰人人澡| 美女网站一区二区| 亚洲欧美日韩国产中文在线| 91精品国产一区二区三区蜜臀 | 中文字幕一区二区三区精华液| 欧美丝袜丝交足nylons图片| 国产精品中文欧美| 亚洲影院理伦片| 国产精品午夜电影| 欧美一区中文字幕| 欧美四级电影网| 国产呦萝稀缺另类资源| 亚洲福利视频导航| 国产精品久久久久9999吃药| 日韩女优制服丝袜电影| 色噜噜狠狠色综合中国| 国产91高潮流白浆在线麻豆| 毛片一区二区三区| 亚洲午夜一二三区视频| 国产精品大尺度| 久久久久久久久伊人| 欧美一区二区三区四区视频| 色美美综合视频| 国产91丝袜在线播放| 美国十次综合导航| 性做久久久久久免费观看欧美| 中文字幕亚洲欧美在线不卡| 欧美精品一区二区三区蜜臀| 欧美日韩国产成人在线免费| 一本大道av伊人久久综合| 国产盗摄一区二区| 精品一区二区久久久| 日韩影院在线观看| 五月婷婷久久丁香| 亚洲va欧美va人人爽午夜| 一区二区三区色| 亚洲三级小视频| 亚洲三级视频在线观看| 自拍av一区二区三区| 国产精品另类一区| 国产精品久久久久久久久动漫| 国产日韩精品久久久| 2024国产精品| 国产丝袜美腿一区二区三区| 精品不卡在线视频| 精品国产伦一区二区三区观看方式| 制服丝袜亚洲精品中文字幕| 欧美美女直播网站| 91麻豆精品国产91久久久 | ww久久中文字幕| 久久看人人爽人人| 国产精品天美传媒沈樵| 亚洲精品ww久久久久久p站| 国产精品电影院| 亚洲精品福利视频网站| 亚洲综合一区二区精品导航| 一区二区三区美女视频| 亚洲国产一区视频| 亚洲电影在线免费观看| 蜜臀久久久久久久| 国产精品亚洲午夜一区二区三区 | 欧美三级午夜理伦三级中视频| 欧美三级日韩三级| 日韩一区二区免费电影| 国产欧美一区二区三区沐欲 | 亚洲一区二区三区不卡国产欧美| 亚洲电影第三页| 韩国在线一区二区| 91色porny在线视频| 欧美日韩国产首页| 久久久不卡影院| 亚洲黄色小说网站| 日本欧美肥老太交大片| 国产黄色精品网站| 欧美三级电影一区| ww亚洲ww在线观看国产| 亚洲激情图片小说视频| 美国十次综合导航| 99re亚洲国产精品| 欧美电影免费观看高清完整版在 | 一区二区三区在线高清| 六月丁香婷婷久久| 日本高清不卡aⅴ免费网站| 日韩午夜在线播放| 亚洲精品视频观看| 国产不卡免费视频| 欧美精选在线播放| 亚洲少妇屁股交4| 国产麻豆成人精品| 欧美麻豆精品久久久久久|