java电梯程序

合集下载

汉诺塔 java 程序

汉诺塔    java   程序

汉诺塔java 程序import java.awt.*;import java.awt.event.*;import javax.swing.*;public class AutoMoveDisc extends JDialog implements ActionListener{ int amountOfDisc=3;TowerPoint [] pointA,pointB,pointC;char [] towerName;Container con;StringBuffer moveStep;JTextArea showStep;JButton bStart,bStop,bContinue,bClose;Timer time;int i=0,number=0;AutoMoveDisc(Container con){setModal(true);setTitle("自动演示搬盘子过程");this.con=con;moveStep=new StringBuffer();time=new Timer(1000,this);time.setInitialDelay(10);showStep=new JTextArea(10,12);bStart=new JButton("演示");bStop=new JButton("暂停");bContinue=new JButton("继续");bClose=new JButton("关闭");bStart.addActionListener(this);bStop.addActionListener(this);bContinue.addActionListener(this);bClose.addActionListener(this);JPanel south=new JPanel();south.setLayout(new FlowLayout());south.add(bStart);south.add(bStop);south.add(bContinue);south.add(bClose);add(new JScrollPane(showStep),BorderLayout.CENTER);add(south,BorderLayout.SOUTH);setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);towerName=new char[3];addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){time.stop();setVisible(false);}});}public void setPointA(TowerPoint [] pointA){this.pointA=pointA;}public void setPointB(TowerPoint [] pointB){this.pointB=pointB;}public void setPointC(TowerPoint [] pointC){this.pointC=pointC;}public void setTowerName(char name[]){if(name[0]==name[1]||name[0]==name[2]||name[1]==name[2]){towerName[0]='A';towerName[1]='B';towerName[2]='C';}elsetowerName=name;}public void setAmountOfDisc(int n){amountOfDisc=n;}public void actionPerformed(ActionEvent e) {if(e.getSource()==time){number++;char cStart,cEnd;if(i<=moveStep.length()-2){cStart=moveStep.charAt(i);cEnd=moveStep.charAt(i+1);showStep.append("("+number+")从"+cStart+"座搬一个盘子到"+cEnd+"座\n");autoMoveDisc(cStart,cEnd);}i=i+2;if(i>=moveStep.length()-1){time.stop();}}else if(e.getSource()==bStart){if(moveStep.length()==0){if(time.isRunning()==false){i=0;moveStep=new StringBuffer();setMoveStep(amountOfDisc,towerName[0],towerName[1],towerName[2]);number=0;time.start();}}}else if(e.getSource()==bStop){if(time.isRunning()==true)time.stop();}else if(e.getSource()==bContinue){if(time.isRunning()==false)time.restart();}else if(e.getSource()==bClose){time.stop();setVisible(false);}}private void setMoveStep(int amountOfDisc,char one,char two,char three){ if(amountOfDisc==1){moveStep.append(one);moveStep.append(three);}else{setMoveStep(amountOfDisc-1,one,three,two);moveStep.append(one);moveStep.append(three);setMoveStep(amountOfDisc-1,two,one,three);}}private void autoMoveDisc(char cStart,char cEnd){Disc disc=null;if(cStart==towerName[0]){for(int i=0;i<pointA.length;i++){if(pointA[i].isHaveDisc()==true){disc=pointA[i].getDiscOnPoint();pointA[i].setHaveDisc(false);break;}}}if(cStart==towerName[1]){for(int i=0;i<pointB.length;i++){if(pointB[i].isHaveDisc()==true){disc=pointB[i].getDiscOnPoint();pointB[i].setHaveDisc(false);break;}}}if(cStart==towerName[2]){for(int i=0;i<pointC.length;i++){if(pointC[i].isHaveDisc()==true){disc=pointC[i].getDiscOnPoint();pointC[i].setHaveDisc(false);break;}}}TowerPoint endPoint=null;int i=0;if(cEnd==towerName[0]){for(i=0;i<pointA.length;i++){if(pointA[i].isHaveDisc()==true){if(i>0){endPoint=pointA[i-1];break;}else if(i==0)break;}}if(i==pointA.length)endPoint=pointA[pointA.length-1];}if(cEnd==towerName[1]){for(i=0;i<pointB.length;i++){if(pointB[i].isHaveDisc()==true){if(i>0){endPoint=pointB[i-1];break;}else if(i==0)break;}}if(i==pointB.length)endPoint=pointB[pointB.length-1];}if(cEnd==towerName[2]){for(i=0;i<pointC.length;i++){if(pointC[i].isHaveDisc()==true){if(i>0){endPoint=pointC[i-1];break;}else if(i==0)break;}}if(i==pointC.length)endPoint=pointC[pointC.length-1];}if(endPoint!=null&&disc!=null){endPoint.putDisc(disc,con);endPoint.setHaveDisc(true);}}}import javax.swing.*;import java.awt.*;public class Disc extends JButton{int number;TowerPoint point;Disc(){setBackground(Color.cyan);}public void setNumber(int n){number=n;}public int getNumber(){return number;}public void setPoint(TowerPoint p){point=p;}public TowerPoint getPoint(){return point;}}import java.awt.event.*;import java.awt.*;public class HandleMouse implements MouseListener,MouseMotionListener { TowerPoint [] pointA,pointB,pointC;TowerPoint startPoint=null,endPoint=null;int leftX,leftY,x0,y0;boolean move=false,countTime=false;Container con;HandleMouse(Container con){this.con=con;}public void setPointA(TowerPoint [] pointA){this.pointA=pointA;}public void setPointB(TowerPoint [] pointB){this.pointB=pointB;}public void setPointC(TowerPoint [] pointC){this.pointC=pointC;}public void mousePressed(MouseEvent e){move=false;Disc disc=null;disc=(Disc)e.getSource();startPoint=disc.getPoint();x0=e.getX();y0=e.getY();int m=0;for(int i=0;i<pointA.length;i++){if(pointA[i].equals(startPoint)){m=i;if(m>0&&(pointA[m-1].isHaveDisc()==false)){move=true;break;}else if(m==0){move=true;break;}}}for(int i=0;i<pointB.length;i++){if(pointB[i].equals(startPoint)){m=i;if(m>0&&(pointB[m-1].isHaveDisc()==false)){move=true;break;}else if(m==0){move=true;break;}}}for(int i=0;i<pointC.length;i++){if(pointC[i].equals(startPoint)){m=i;if(m>0&&(pointC[m-1].isHaveDisc()==false)){move=true;break;}else if(m==0){move=true;break;}}}}public void mouseMoved(MouseEvent e){}public void mouseDragged(MouseEvent e){Disc disc=null;disc=(Disc)e.getSource();leftX=disc.getBounds().x;leftY=disc.getBounds().y;int x=e.getX();int y=e.getY();leftX=leftX+x;leftY=leftY+y;if(move==true)disc.setLocation(leftX-x0,leftY-y0);}public void mouseReleased(MouseEvent e){Disc disc=null;disc=(Disc)e.getSource();Rectangle rect=disc.getBounds();boolean location=false;int x=-1,y=-1;for(int i=0;i<pointA.length;i++){x=pointA[i].getX();y=pointA[i].getY();if(rect.contains(x,y)){endPoint=pointA[i];if(i==pointA.length-1&&endPoint.isHaveDisc()==false){location=true;break;}else if(i<pointA.length-1&&pointA[i+1].isHaveDisc()==true&&endPoint.isHaveDisc()==false&&pointA[i+1].getDiscOnPoint().getNumber()>disc.getNumber()){location=true;break;}}}for(int i=0;i<pointB.length;i++){x=pointB[i].getX();y=pointB[i].getY();if(rect.contains(x,y)){endPoint=pointB[i];if(i==pointB.length-1&&endPoint.isHaveDisc()==false){location=true;break;}else if(i<pointB.length-1&&pointB[i+1].isHaveDisc()==true&&endPoint.isHaveDisc()==false&&pointB[i+1].getDiscOnPoint().getNumber()>disc.getNumber()){location=true;break;}}}for(int i=0;i<pointC.length;i++){x=pointC[i].getX();y=pointC[i].getY();if(rect.contains(x,y)){endPoint=pointC[i];if(i==pointC.length-1&&endPoint.isHaveDisc()==false){location=true;break;}else if(i<pointC.length-1&&pointC[i+1].isHaveDisc()==true&&endPoint.isHaveDisc()==false&&pointC[i+1].getDiscOnPoint().getNumber()>disc.getNumber()){location=true;break;}}}if(endPoint!=null&&location==true){endPoint.putDisc(disc,con);startPoint.setHaveDisc(false);}elsestartPoint.putDisc(disc,con);}public void mouseEntered(MouseEvent e){}public void mouseExited(MouseEvent e){}public void mouseClicked(MouseEvent e){}}import javax.swing.*;import java.awt.*;import java.awt.event.*;public class HannoiWindow extends JFrame implements ActionListener{ Tower tower=null;int amountOfDisc=3;char []towerName={'A','B','C'};JMenuBar bar;JMenu menuGrade;JMenuItem oneGradeItem,twoGradeItem,threeGradeItem;JButton renew=null;JButton autoButton=null;JPanel center=new JPanel();HannoiWindow(){tower=new Tower(towerName);tower.setAmountOfDisc(amountOfDisc);tower.setMaxDiscWidth(120);tower.setMinDiscWidth(50);tower.setDiscHeight(16);tower.putDiscOnTower();add(tower,BorderLayout.CENTER);bar=new JMenuBar();menuGrade=new JMenu("选择级别");oneGradeItem=new JMenuItem("初级");twoGradeItem=new JMenuItem("中级");threeGradeItem=new JMenuItem("高级");menuGrade.add(oneGradeItem);menuGrade.add(twoGradeItem);menuGrade.add(threeGradeItem);bar.add(menuGrade);setJMenuBar(bar);oneGradeItem.addActionListener(this);twoGradeItem.addActionListener(this);threeGradeItem.addActionListener(this);renew=new JButton("重新开始");renew.addActionListener(this);autoButton=new JButton("自动演示");autoButton.addActionListener(this);JPanel north=new JPanel();north.add(renew);north.add(autoButton);String mess="将全部盘子从"+towerName[0]+"座搬运到"+towerName[1]+ "座或"+towerName[2]+"座";JLabel hintMess=new JLabel(mess,JLabel.CENTER);north.add(hintMess);add(north,BorderLayout.NORTH);setResizable(false);setVisible(true);setBounds(60,60,460,410);validate();setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}public void actionPerformed(ActionEvent e){if(e.getSource()==oneGradeItem){amountOfDisc=3;tower.setAmountOfDisc(amountOfDisc);tower.putDiscOnTower();}else if(e.getSource()==twoGradeItem){amountOfDisc=4;tower.setAmountOfDisc(amountOfDisc);tower.putDiscOnTower();}else if(e.getSource()==threeGradeItem){amountOfDisc=5;tower.setAmountOfDisc(amountOfDisc);tower.putDiscOnTower();}else if(e.getSource()==renew){tower.setAmountOfDisc(amountOfDisc);tower.putDiscOnTower();}else if(e.getSource()==autoButton){tower.setAmountOfDisc(amountOfDisc);tower.putDiscOnTower();int x=this.getBounds().x+this.getBounds().width;int y=this.getBounds().y;tower.getAutoMoveDisc().setLocation(x,y);tower.getAutoMoveDisc().setSize(280,this.getBounds().height);tower.getAutoMoveDisc().setVisible(true);}validate();}public static void main(String args[]){new HannoiWindow();}}import javax.swing.*;import java.awt.*;public class Tower extends JPanel{int amountOfDisc=3;Disc [] disc;int maxDiscWidth,minDiscWidth,discHeight;char [] towerName;TowerPoint [] pointA,pointB,pointC;HandleMouse handleMouse;AutoMoveDisc autoMoveDisc;Tower(char [] towerName){handleMouse=new HandleMouse(this);this.towerName=towerName;setLayout(null);setBackground(new Color(200,226,226));}public void setAmountOfDisc(int number){if(number<=1)amountOfDisc=1;elseamountOfDisc=number;}public void setMaxDiscWidth(int m){maxDiscWidth=m;}public void setMinDiscWidth(int m){minDiscWidth=m;}public void setDiscHeight(int h){discHeight=h;}public AutoMoveDisc getAutoMoveDisc(){return autoMoveDisc;}public void putDiscOnTower(){removeDisk();int n=(maxDiscWidth-minDiscWidth)/amountOfDisc;disc=new Disc[amountOfDisc];for(int i=0;i<disc.length;i++){disc[i]=new Disc();disc[i].setNumber(i);int diskwidth=minDiscWidth+i*n;disc[i].setSize(diskwidth,discHeight);disc[i].addMouseListener(handleMouse);disc[i].addMouseMotionListener(handleMouse);}pointA=new TowerPoint[amountOfDisc];pointB=new TowerPoint[amountOfDisc];pointC=new TowerPoint[amountOfDisc];int vertialDistance=discHeight;for(ii<pointA.nt i=0;length;i++){pointA[i]=new TowerPoint(maxDiscWidth,100+vertialDistance);vertialDistance=vertialDistance+discHeight;}vertialDistance=discHeight;for(int i=0;i<pointB.length;i++){pointB[i]=new TowerPoint(2*maxDiscWidth,100+vertialDistance);vertialDistance=vertialDistance+discHeight;}vertialDistance=discHeight;for(int i=0;i<pointC.length;i++){pointC[i]=new TowerPoint(3*maxDiscWidth,100+vertialDistance);vertialDistance=vertialDistance+discHeight;}for(int i=0;i<pointA.length;i++){pointA[i].putDisc(disc[i],this);}handleMouse.setPointA(pointA);handleMouse.setPointB(pointB);handleMouse.setPointC(pointC);autoMoveDisc=new AutoMoveDisc(this);autoMoveDisc.setTowerName(towerName);autoMoveDisc.setAmountOfDisc(amountOfDisc);autoMoveDisc.setPointA(pointA);autoMoveDisc.setPointB(pointB);autoMoveDisc.setPointC(pointC);validate();repaint();}public void removeDisk(){if(pointA!=null){for(int i=0;i<pointA.length;i++){pointA[i].removeDisc(pointA[i].getDiscOnPoint(),this);pointB[i].removeDisc(pointB[i].getDiscOnPoint(),this);pointC[i].removeDisc(pointC[i].getDiscOnPoint(),this);}}}public void paintComponent(Graphics g){super.paintComponent(g);int x1,y1,x2,y2;x1=pointA[0].getX();y1=pointA[0].getY()-discHeight/2;x2=pointA[amountOfDisc-1].getX();y2=pointA[amountOfDisc-1].getY()+discHeight/2;g.drawLine(x1,y1,x2,y2);x1=pointB[0].getX();y1=pointB[0].getY()-discHeight/2;x2=pointB[amountOfDisc-1].getX();y2=pointB[amountOfDisc-1].getY()+discHeight/2;g.drawLine(x1,y1,x2,y2);x1=pointC[0].getX();y1=pointC[0].getY()-discHeight/2;x2=pointC[amountOfDisc-1].getX();y2=pointC[amountOfDisc-1].getY()+discHeight/2;g.drawLine(x1,y1,x2,y2);g.setColor(Color.blue);x1=pointA[amountOfDisc-1].getX()-maxDiscWidth/2;y1=pointA[amountOfDisc-1].getY()+discHeight/2;x2=pointC[amountOfDisc-1].getX()+maxDiscWidth/2;y2=pointC[amountOfDisc-1].getY()+discHeight/2;int length=x2-x1,height=6;g.fillRect(x1,y1,length,height);int size=5;for(int i=0;i<pointA.length;i++){g.fillOval(pointA[i].getX()-size/2,pointA[i].getY()-size/2,size,size);g.fillOval(pointB[i].getX()-size/2,pointB[i].getY()-size/2,size,size);g.fillOval(pointC[i].getX()-size/2,pointC[i].getY()-size/2,size,size);}g.drawString(towerName[0]+"座",pointA[amountOfDisc-1].getX(),pointA[amountOfDisc-1].getY()+50);g.drawString(towerName[1]+"座",pointB[amountOfDisc-1].getX(),pointB[amountOfDisc-1].getY()+50);g.drawString(towerName[2]+"座",pointC[amountOfDisc-1].getX(),pointC[amountOfDisc-1].getY()+50);}}import java.awt.*;public class TowerPoint{int x,y;boolean haveDisc;Disc disc=null;public TowerPoint(int x,int y){this.x=x;this.y=y;}public boolean isHaveDisc(){return haveDisc;}public void setHaveDisc(boolean boo){haveDisc=boo;}public int getX(){return x;}public int getY(){return y;}public boolean equals(TowerPoint p){if(p.getX()==this.getX()&&p.getY()==this.getY())return true;elsereturn false;}public void putDisc(Component com,Container con){ disc=(Disc)com;con.setLayout(null);con.add(disc);int w=disc.getBounds().width;int h=disc.getBounds().height;disc.setBounds(x-w/2,y-h/2,w,h);haveDisc=true;disc.setPoint(this);con.validate();}public Disc getDiscOnPoint(){return disc;}public void removeDisc(Component com,Container con){ if(com!=null)con.remove(com);con.validate();}}。

电梯调度算法

电梯调度算法

目录一、算法设计 (1)1.算法思想 (1)2.运行环境 (1)3.问题描述 (1)二、实验步骤及方法 (1)三、源程序代码 (2)四、运行结果图 (15)五、课程总结 (15)一、算法设计1.算法思想本算法设计一部电梯,通过往返寻找方法,即先查询电梯运行方向的楼层是否存在有其他键被按下,有就继续往该方向运行,如果没有就查询电梯运行反方向的楼层是否有按键被按下,如果有电梯就改变方向,反方向运行。

如果没有电梯就停止在该楼层,30秒后如果没有任何键被按下,电梯就自动返回1楼停住。

同时,电梯乘客所去的楼层方向与电梯当前方向一致的话,则电梯优先搭载该乘客。

随后再搭载去反方向的乘客,以此实现电梯的升降操作。

2.运行环境本程序用java语言、eclipse平台编写。

3.问题描述电梯调度算法的基本原则就是如果在电梯运行方向上有人要使用电梯则继续往那个方向运动,如果电梯中的人还没有到达目的地则继续向原方向运动。

具体而言,如果电梯现在朝上运动,如果当前楼层的上方和下方都有请求,则先响应所有上方的请求,然后才向下响应下方的请求;反之。

二、实验步骤及方法1.由于鼠标单击每个楼层按钮时,需要作出相应的动作,所以我们使用jbutton按钮类,通过jbutton的单击事件来模拟楼层按钮并通过改变颜色来表示按钮是否被按下2.使用数组存储每个按钮的状态,1表示被按下,0表示未被按下。

用于电梯是否到达目标层的判断,及按钮颜色的刷新判断;3.“电梯”也是一个jbutton类,通过改变颜色来模拟电梯的运行,需要在此类中设置一个方向值,用0,1,2分别表示电梯的停止向上向下运行。

三、源程序代码import java.awt.Color;import java.awt.Container;import java.awt.Font;import java.awt.GridLayout;import java.awt.TextField;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.ItemEvent;import java.awt.event.ItemListener;import java.util.*;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.Timer;public class Lifta{/*** @param args*/public static void main(String[] args){Brick brick=new Brick();} }class Brick{ //方块类public int octime=0; //计算开关门事件。

三层电梯PLC程序

三层电梯PLC程序
(2)电梯运营到指定位后,具有自动开/关门旳功能, 也能手动开门和关门。
(3)利用指示灯显示电梯厢外旳呼喊信号、电梯厢内 旳指令信号和电梯到达信号。
(4)能自动判电梯运营方向,并发出相应指示信号。
7.3 PLC控Байду номын сангаас系统旳应用举例 2
(5)电梯上下运营由一台主电机驱动。电机正转,电 梯上升;电动反转,电梯下降。 (6)电梯轿厢门由另一台小功率电机驱动。电机正转 ,厢门打开;电机反转,厢门关闭。 2.PLC选型及输入、输出地址分配
7.3 PLC控制系统旳应用举例 9
当到达该层,由该层旳接近开关X011、X012和X013中 旳某一种动作时才被撤消。
7.3 PLC控制系统旳应用举例 10
7.3 PLC控制系统旳应用举例 11
(4)电梯开启和方向选择及变速控制 电梯开启和方向选择及变速控制梯形图如图7.5所示。 电梯运营方向由输出继电器Y020和Y021指示,当电梯 运营方向拟定后,在关门信号和门锁信号符合要求旳 情况下,或者经过电梯上行输出继电器Y002,驱动电 机正转,电梯上升;或者经过电梯下行输出继电器 Y003,驱动电机反转,电梯下降。 电梯开启后迅速运营,2s后加速,在接近目旳楼层时, 相应旳接近开关动作,电梯开始转为慢速运营,直至 电梯到达目旳楼层时停止。
2
7.3 PLC控制系统旳应用举例 4
7.3 PLC控制系统旳应用举例 6
闭合,Y000得电,电动机正转,轿厢门打开。开门到 位,开门行程开关SQ1动作,X002常闭触点断开, Y000失电,开门过程结束。 ②自动开门时,当电梯运营到位后,相应旳楼层接近 开关SQ5或SQ6或SQ7被压下,即X011或X012或X013 闭合。T0开始计时,延时3s后,T0触点闭合,Y000输 出有效,轿厢门打开。 (2)电梯关门控制也分手动和自动两种情况。 ①手动关门时,当按下关门按钮SB2时X001闭合, Y001得电并自锁,驱动关门继电器使电动机反转,轿 厢门关闭。关门到位,关门行程开关SQ2动作,X003 常闭触点断开,Y001失电,关门过程结束。

电梯控制系统(Java课程设计)内容

电梯控制系统(Java课程设计)内容
当电梯正在上行时,如果上行队列的队列头改变时,系统将同时将这个新的队列头发送给电梯作为它的新目的地。有两种原因引起队列头的改变。
(1)新的请求插入到上行队列头。
(2)电梯到达某个楼层将这个楼层的请求从上行队列的队列头删除,后继的更高楼层号成为对列头。
当电梯正在下行时,如果下行队列的队列头改变时,系统将同时将这个新的队列头发送给电梯作为它的新目的地。有两种原因引起下行队列头的改变。
(2)M被插入到上行队列的合适位置。
(3)如果M被插到上行队列头。
如果电梯正处于上行状态。将M发送给电梯作为目的地。
如果电梯处于停止状态。将M发送给电梯作为目的地。
(4)电梯到达此楼层。
(5)电梯自动打开门(用例9)。
(6)乘客进入电梯。
(7)超重测试(用例6)。
用例2按下某楼层的下行按钮(go down stair)。
用例8打开某层电梯锁(open floor)
此层的楼层请求按钮和电梯内的楼层按钮恢复正常。
用例9自动打开电梯门(auto open door)
(1)电梯到达某楼层。
(2)电梯自动开门。
用例10自动关闭电梯门(auto close door)
(1)电梯门打开的状态达到设置的时限。
(2)关闭电梯门。
A3 类模型
根据分析,我们可以得到下面这些类。
乘客类(Passenger)、管理员类(Manager)、电梯类(Elevator)、电梯门类(ElevatorDoor)、楼层的上行请求按钮类(Go Up Request)、楼层的下请求按钮类(Gequest)、楼层锁类(lock)、指示灯类(Indicate Light)、队列类(Queue)、定时器类(Timer)、异常处理类(Expection)。

庞源电梯租赁管理软件_源代码_java

庞源电梯租赁管理软件_源代码_java

package junit.framework;import java.util.ArrayList;import java.util.Arrays;import java.util.HashMap;import java.util.List;import org.junit.runner.Description;import org.junit.runner.notification.Failure;import org.junit.runner.notification.RunListener;import org.junit.runner.notification.RunNotifier;public class JUnit4TestAdapterCache extends HashMap<Description, Test>{private static final long serialVersionUID = 1L;private static final JUnit4TestAdapterCache fInstance = new JUnit4TestAdapterCache(); public static JUnit4TestAdapterCache getDefault() {return fInstance;}public Test asTest(Description description) {if (description.isSuite()) {return createTest(description);}if (!containsKey(description))put(description, createTest(description));return (Test)get(description);}Test createTest(Description description){if (description.isTest()) {return new JUnit4TestCaseFacade(description);}TestSuite suite = new TestSuite(description.getDisplayName());for (Description child : description.getChildren())suite.addTest(asTest(child));return suite;}public RunNotifier getNotifier(final TestResult result, JUnit4TestAdapter adapter){RunNotifier notifier = new RunNotifier();notifier.addListener(new RunListener(){public void testFailure(Failure failure) throws Exception {result.addError(JUnit4TestAdapterCache.this.asTest(failure.getDescription()), failure.getException());}public void testFinished(Description description)throws Exception{result.endTest(JUnit4TestAdapterCache.this.asTest(description));}public void testStarted(Description description)throws Exception{result.startTest(JUnit4TestAdapterCache.this.asTest(description)); }});return notifier;}public List<Test> asTestList(Description description) {if (description.isTest()) {return Arrays.asList(new Test[] { asTest(description) });}List returnThis = new ArrayList();for (Description child : description.getChildren()) {returnThis.add(asTest(child));}return returnThis;}}package junit.framework;import ng.reflect.InvocationTargetException;import ng.reflect.Method;import ng.reflect.Modifier;public abstract class TestCase extends Assertimplements Test{private String fName;public TestCase(){this.fName = null;}public TestCase(String name){this.fName = name;}public int countTestCases(){return 1;}protected TestResult createResult(){return new TestResult();}public TestResult run(){TestResult result = createResult();run(result);return result;}public void run(TestResult result){result.run(this);}public void runBare()throws Throwable{Throwable exception = null;setUp();try {runTest();} catch (Throwable running) {exception = running;}finally {try {tearDown();} catch (Throwable tearingDown) {if (exception == null) exception = tearingDown;}}if (exception != null) throw exception;}protected void runTest()throws Throwable{assertNotNull("TestCase.fName cannot be null", this.fName);Method runMethod = null;try{runMethod = getClass().getMethod(this.fName, (Class[])null); } catch (NoSuchMethodException e) {fail("Method \"" + this.fName + "\" not found");}if (!Modifier.isPublic(runMethod.getModifiers())) {fail("Method \"" + this.fName + "\" should be public");}try{runMethod.invoke(this, new Object[0]);}catch (InvocationTargetException e) {e.fillInStackTrace();throw e.getTargetException();}catch (IllegalAccessException e) {e.fillInStackTrace();throw e;}}protected void setUp()throws Exception{}protected void tearDown()throws Exception{}public String toString(){return getName() + "(" + getClass().getName() + ")";}public String getName(){return this.fName;}public void setName(String name){this.fName = name;}}package junit.framework;import java.io.PrintWriter;import java.io.StringWriter;public class TestFailure{protected Test fFailedTest;protected Throwable fThrownException;public TestFailure(Test failedTest, Throwable thrownException){this.fFailedTest = failedTest;this.fThrownException = thrownException;}public Test failedTest(){return this.fFailedTest;}public Throwable thrownException(){return this.fThrownException;}public String toString(){StringBuffer buffer = new StringBuffer();buffer.osend(this.fFailedTest + ": " + this.fThrownException.getMessage()); return buffer.toString();}public String trace() {StringWriter stringWriter = new StringWriter();PrintWriter writer = new PrintWriter(stringWriter);thrownException().printStackTrace(writer);StringBuffer buffer = stringWriter.getBuffer();return buffer.toString();}public String exceptionMessage() {return thrownException().getMessage();}public boolean isFailure() {return thrownException() instanceof AssertionFailedError;}}package junit.framework;import java.util.ArrayList;import java.util.Collections;import java.util.Enumeration;import java.util.List;public class TestResult{protected List<TestFailure> fFailures;protected List<TestFailure> fErrors;protected List<TestListener> fListeners;protected int fRunTests;private boolean fStop;public TestResult(){this.fFailures = new ArrayList();this.fErrors = new ArrayList();this.fListeners = new ArrayList();this.fRunTests = 0;this.fStop = false;}public synchronized void addError(Test test, Throwable t){this.fErrors.add(new TestFailure(test, t));for (TestListener each : cloneListeners())each.addError(test, t);}public synchronized void addFailure(Test test, AssertionFailedError t) {this.fFailures.add(new TestFailure(test, t));for (TestListener each : cloneListeners())each.addFailure(test, t);}public synchronized void addListener(TestListener listener){this.fListeners.add(listener);}public synchronized void removeListener(TestListener listener){this.fListeners.remove(listener);}private synchronized List<TestListener> cloneListeners(){List result = new ArrayList();result.addAll(this.fListeners);return result;}public void endTest(Test test){for (TestListener each : cloneListeners())each.endTest(test);}public synchronized int errorCount(){return this.fErrors.size();}public synchronized Enumeration<TestFailure> errors() {return Collections.enumeration(this.fErrors);}public synchronized int failureCount(){return this.fFailures.size();}public synchronized Enumeration<TestFailure> failures() {return Collections.enumeration(this.fFailures);}protected void run(final TestCase test){startTest(test);Protectable p = new Protectable() {public void protect() throws Throwable {test.runBare();}};runProtected(test, p);endTest(test);}public synchronized int runCount(){return this.fRunTests;}public void runProtected(Test test, Protectable p){try{p.protect();}catch (AssertionFailedError e) {addFailure(test, e);}catch (ThreadDeath e) {throw e;}catch (Throwable e) {addError(test, e);}}public synchronized boolean shouldStop(){return this.fStop;}public void startTest(Test test){int count = test.countTestCases();synchronized (this) {this.fRunTests += count;}for (TestListener each : cloneListeners())each.startTest(test);}public synchronized void stop(){this.fStop = true;}public synchronized boolean wasSuccessful(){return (failureCount() == 0) && (errorCount() == 0); }}package junit.framework;import java.io.PrintWriter;import java.io.StringWriter;import ng.reflect.Constructor;import ng.reflect.InvocationTargetException;import ng.reflect.Method;import ng.reflect.Modifier;import java.util.ArrayList;import java.util.Enumeration;import java.util.List;import java.util.Vector;public class TestSuiteimplements Test{private String fName;private Vector<Test> fTests = new Vector(10);public static Test createTest(Class<?> theClass, String name){Constructor constructor;try{constructor = getTestConstructor(theClass);} catch (NoSuchMethodException e) {return warning("Class " + theClass.getName() + " has no public constructor TestCase(String name) or TestCase()");}Object test;try {if (constructor.getParameterTypes().length == 0) {Object test = constructor.newInstance(new Object[0]);if ((test instanceof TestCase))((TestCase)test).setName(name);} else {test = constructor.newInstance(new Object[] { name });}} catch (InstantiationException e) {return warning("Cannot instantiate test case: " + name + " (" + exceptionToString(e) + ")"); } catch (InvocationTargetException e) {return warning("Exception in constructor: " + name + " (" + exceptionToString(e.getTargetException()) + ")");} catch (IllegalAccessException e) {return warning("Cannot access test case: " + name + " (" + exceptionToString(e) + ")"); }return (Test)test;}public static Constructor<?> getTestConstructor(Class<?> theClass)throws NoSuchMethodException{try{return theClass.getConstructor(new Class[] { String.class });}catch (NoSuchMethodException e) {}return theClass.getConstructor(new Class[0]);}public static Test warning(final String message){return new TestCase("warning"){protected void runTest() {fail(message);}};}private static String exceptionToString(Throwable t){StringWriter stringWriter = new StringWriter();PrintWriter writer = new PrintWriter(stringWriter);t.printStackTrace(writer);return stringWriter.toString();}public TestSuite(){}public TestSuite(Class<?> theClass){addTestsFromTestCase(theClass);}private void addTestsFromTestCase(Class<?> theClass) {this.fName = theClass.getName();try {getTestConstructor(theClass);} catch (NoSuchMethodException e) {addTest(warning("Class " + theClass.getName() + " has no public constructor TestCase(String name) or TestCase()"));return;}if (!Modifier.isPublic(theClass.getModifiers())) {addTest(warning("Class " + theClass.getName() + " is not public"));return;}Class superClass = theClass;List names = new ArrayList();while (Test.class.isAssignableFrom(superClass)) {for (Method each : superClass.getDeclaredMethods())addTestMethod(each, names, theClass);superClass = superClass.getSuperclass();}if (this.fTests.size() == 0)addTest(warning("No tests found in " + theClass.getName()));}public TestSuite(Class<? extends TestCase> theClass, String name){this(theClass);setName(name);}public TestSuite(String name){setName(name);}public TestSuite(Class<?>[] classes){for (Class each : classes)addTest(testCaseForClass(each));}private Test testCaseForClass(Class<?> each) {if (TestCase.class.isAssignableFrom(each)) {return new TestSuite(each.asSubclass(TestCase.class));}return warning(each.getCanonicalName() + " does not extend TestCase"); }public TestSuite(Class<? extends TestCase>[] classes, String name){this(classes);setName(name);}public void addTest(Test test){this.fTests.add(test);}public void addTestSuite(Class<? extends TestCase> testClass){addTest(new TestSuite(testClass));}public int countTestCases(){int count = 0;for (Test each : this.fTests)count += each.countTestCases();return count;}public String getName(){return this.fName;}public void run(TestResult result){for (Test each : this.fTests) {if (result.shouldStop())break;runTest(each, result);}}public void runTest(Test test, TestResult result) {test.run(result);}public void setName(String name){this.fName = name;}public Test testAt(int index){return (Test)this.fTests.get(index);}public int testCount(){return this.fTests.size();}public Enumeration<Test> tests(){return this.fTests.elements();}public String toString(){if (getName() != null)return getName();return super.toString();}private void addTestMethod(Method m, List<String> names, Class<?> theClass) {String name = m.getName();if (names.contains(name))return;if (!isPublicTestMethod(m)) {if (isTestMethod(m))addTest(warning("Test method isn't public: " + m.getName() + "(" + theClass.getCanonicalName() + ")"));return;}names.add(name);addTest(createTest(theClass, name));}private boolean isPublicTestMethod(Method m) {return (isTestMethod(m)) && (Modifier.isPublic(m.getModifiers()));}private boolean isTestMethod(Method m) {return (m.getParameterTypes().length == 0) &&(m.getName().startsWith("test")) && (m.getReturnType().equals(Void.TYPE));}}package junit.runner;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.PrintStream;import java.io.PrintWriter;import java.io.StringReader;import java.io.StringWriter;import ng.reflect.InvocationTargetException;import ng.reflect.Method;import ng.reflect.Modifier;import java.text.NumberFormat;import java.util.Properties;import junit.framework.AssertionFailedError;import junit.framework.Test;import junit.framework.TestListener;import junit.framework.TestSuite;public abstract class BaseTestRunnerimplements TestListener{public static final String SUITE_METHODNAME = "suite";private static Properties fPreferences;static int fgMaxMessageLength = getPreference("maxmessage", fgMaxMessageLength); static boolean fgFilterStack = true;boolean fLoading = true;public synchronized void startTest(Test test){testStarted(test.toString());}protected static void setPreferences(Properties preferences) {fPreferences = preferences;}protected static Properties getPreferences() {if (fPreferences == null) {fPreferences = new Properties();fPreferences.put("loading", "true");fPreferences.put("filterstack", "true");readPreferences();}return fPreferences;}public static void savePreferences() throws IOException {FileOutputStream fos = new FileOutputStream(getPreferencesFile());try {getPreferences().store(fos, "");} finally {fos.close();}}public static void setPreference(String key, String value) {getPreferences().put(key, value);}public synchronized void endTest(Test test) {testEnded(test.toString());}public synchronized void addError(Test test, Throwable t) {testFailed(1, test, t);}public synchronized void addFailure(Test test, AssertionFailedError t) {testFailed(2, test, t);}public abstract void testStarted(String paramString);public abstract void testEnded(String paramString);public abstract void testFailed(int paramInt, Test paramTest, Throwable paramThrowable); public Test getTest(String suiteClassName){if (suiteClassName.length() <= 0) {clearStatus();return null;}Class testClass = null;try {testClass = loadSuiteClass(suiteClassName);} catch (ClassNotFoundException e) {String clazz = e.getMessage();if (clazz == null)clazz = suiteClassName;runFailed("Class not found \"" + clazz + "\"");return null;} catch (Exception e) {runFailed("Error: " + e.toString());return null;}Method suiteMethod = null;try {suiteMethod = testClass.getMethod("suite", new Class[0]);}catch (Exception e) {clearStatus();return new TestSuite(testClass);}if (!Modifier.isStatic(suiteMethod.getModifiers())) {runFailed("Suite() method must be static");return null;}Test test = null;try {test = (Test)suiteMethod.invoke(null, (Object[])new Class[0]);if (test == null)return test;}catch (InvocationTargetException e) {runFailed("Failed to invoke suite():" + e.getTargetException().toString()); return null;}catch (IllegalAccessException e) {runFailed("Failed to invoke suite():" + e.toString());return null;}clearStatus();return test;}public String elapsedTimeAsString(long runTime){return NumberFormat.getInstance().format(runTime / 1000.0D);}protected String processArguments(String[] args){String suiteName = null;for (int i = 0; i < args.length; i++) {if (args[i].equals("-noloading")) {setLoading(false);} else if (args[i].equals("-nofilterstack")) {fgFilterStack = false;} else if (args[i].equals("-c")) {if (args.length > i + 1)suiteName = extractClassName(args[(i + 1)]);elseSystem.out.println("Missing Test class name");i++;} else {suiteName = args[i];}}return suiteName;}public void setLoading(boolean enable){this.fLoading = enable;}public String extractClassName(String className){if (className.startsWith("Default package for"))return className.substring(stIndexOf(".") + 1);return className;}public static String truncate(String s){if ((fgMaxMessageLength != -1) && (s.length() > fgMaxMessageLength))s = s.substring(0, fgMaxMessageLength) + "成功!";return s;}protected abstract void runFailed(String paramString);protected Class<?> loadSuiteClass(String suiteClassName)throws ClassNotFoundException{return Class.forName(suiteClassName);}protected void clearStatus(){}protected boolean useReloadingTestSuiteLoader(){return (getPreference("loading").equals("true")) && (this.fLoading); }private static File getPreferencesFile() {String home = System.getProperty("user.home");return new File(home, "junit.properties");}private static void readPreferences() {InputStream is = null;try {is = new FileInputStream(getPreferencesFile());setPreferences(new Properties(getPreferences()));getPreferences().load(is);} catch (IOException e) {try {if (is != null)is.close();} catch (IOException e1) {}}}public static String getPreference(String key) {return getPreferences().getProperty(key);}public static int getPreference(String key, int dflt) {String value = getPreference(key);int intValue = dflt;if (value == null)return intValue;try {intValue = Integer.parseInt(value);} catch (NumberFormatException ne) {}return intValue;}public static String getFilteredTrace(Throwable t){StringWriter stringWriter = new StringWriter();PrintWriter writer = new PrintWriter(stringWriter);t.printStackTrace(writer);StringBuffer buffer = stringWriter.getBuffer();String trace = buffer.toString();return getFilteredTrace(trace);}public static String getFilteredTrace(String stack){if (showStackRaw()) {return stack;}StringWriter sw = new StringWriter();PrintWriter pw = new PrintWriter(sw);StringReader sr = new StringReader(stack);BufferedReader br = new BufferedReader(sr);try{String line;while ((line = br.readLine()) != null)if (!filterLine(line))pw.println(line);}catch (Exception IOException) {return stack;}return sw.toString();}protected static boolean showStackRaw() {return (!getPreference("filterstack").equals("true")) || (!fgFilterStack);}static boolean filterLine(String line) {String[] patterns = { "junit.framework.TestCase", "junit.framework.TestResult", "junit.framework.TestSuite", "junit.framework.Assert.", "junit.swingui.TestRunner", "junit.awtui.TestRunner", "junit.textui.TestRunner", "ng.reflect.Method.invoke(" }; for (int i = 0; i < patterns.length; i++) {if (line.indexOf(patterns[i]) > 0)return true;}return false;}}package junit.textui;import java.io.PrintStream;import java.text.NumberFormat;import java.util.Enumeration;import junit.framework.AssertionFailedError;import junit.framework.Test;import junit.framework.TestFailure;import junit.framework.TestListener;import junit.framework.TestResult;import junit.runner.BaseTestRunner;public class ResultPrinterimplements TestListener{PrintStream fWriter;int fColumn = 0;public ResultPrinter(PrintStream writer) {this.fWriter = writer;}synchronized void print(TestResult result, long runTime){printHeader(runTime);printErrors(result);printFailures(result);printFooter(result);}void printWaitPrompt() {getWriter().println();getWriter().println("<RETURN> to continue");}protected void printHeader(long runTime){getWriter().println();getWriter().println("Time: " + elapsedTimeAsString(runTime));}protected void printErrors(TestResult result) {printDefects(result.errors(), result.errorCount(), "error");}protected void printFailures(TestResult result) {printDefects(result.failures(), result.failureCount(), "failure");}protected void printDefects(Enumeration<TestFailure> booBoos, int count, String type) { if (count == 0) return;if (count == 1)getWriter().println("There was " + count + "" + type + ":");elsegetWriter().println("There were " + count + "" + type + "s:");for (int i = 1; booBoos.hasMoreElements(); i++)printDefect((TestFailure)booBoos.nextElement(), i);}public void printDefect(TestFailure booBoo, int count){printDefectHeader(booBoo, count);printDefectTrace(booBoo);}protected void printDefectHeader(TestFailure booBoo, int count){getWriter().print(count + ") " + booBoo.failedTest());}protected void printDefectTrace(TestFailure booBoo) {getWriter().print(BaseTestRunner.getFilteredTrace(booBoo.trace()));}protected void printFooter(TestResult result) {if (result.wasSuccessful()) {getWriter().println();getWriter().print("OK");getWriter().println(" (" + result.runCount() + " test" + (result.runCount() == 1 ? "" : "s") + ")");}else {getWriter().println();getWriter().println("FAILURES!!!");getWriter().println("Tests run: " + result.runCount() + ", Failures: " + result.failureCount() + ", Errors: " + result.errorCount());}getWriter().println();}protected String elapsedTimeAsString(long runTime){return NumberFormat.getInstance().format(runTime / 1000.0D);}public PrintStream getWriter() {return this.fWriter;}public void addError(Test test, Throwable t){getWriter().print("E");}public void addFailure(Test test, AssertionFailedError t){getWriter().print("F");}public void endTest(Test test){}public void startTest(Test test){getWriter().print(".");if (this.fColumn++ >= 40) {getWriter().println();this.fColumn = 0;}}}package junit.textui;import java.io.InputStream;import java.io.PrintStream;import junit.framework.Test;import junit.framework.TestCase;import junit.framework.TestResult;import junit.framework.TestSuite;import junit.runner.BaseTestRunner;import junit.runner.Version;public class TestRunner extends BaseTestRunner{private ResultPrinter fPrinter;public static final int SUCCESS_EXIT = 0;public static final int FAILURE_EXIT = 1;public static final int EXCEPTION_EXIT = 2;public TestRunner(){this(System.out);}public TestRunner(PrintStream writer){this(new ResultPrinter(writer));}public TestRunner(ResultPrinter printer){this.fPrinter = printer;}public static void run(Class<? extends TestCase> testClass) {run(new TestSuite(testClass));}public static TestResult run(Test test){TestRunner runner = new TestRunner();return runner.doRun(test);}public static void runAndWait(Test suite){TestRunner aTestRunner = new TestRunner();aTestRunner.doRun(suite, true);}public void testFailed(int status, Test test, Throwable t) {}public void testStarted(String testName){}public void testEnded(String testName){}protected TestResult createTestResult(){return new TestResult();}public TestResult doRun(Test test) {return doRun(test, false);}public TestResult doRun(Test suite, boolean wait) { TestResult result = createTestResult();result.addListener(this.fPrinter);long startTime = System.currentTimeMillis();suite.run(result);long endTime = System.currentTimeMillis();long runTime = endTime - startTime;this.fPrinter.print(result, runTime);pause(wait);return result;}protected void pause(boolean wait) {if (!wait) return;this.fPrinter.printWaitPrompt();try {System.in.read();}catch (Exception e) {}}public static void main(String[] args) {TestRunner aTestRunner = new TestRunner();try {TestResult r = aTestRunner.start(args);if (!r.wasSuccessful())System.exit(1);System.exit(0);} catch (Exception e) {System.err.println(e.getMessage());System.exit(2);}}public TestResult start(String[] args)throws Exception{String testCase = "";String method = "";boolean wait = false;for (int i = 0; i < args.length; i++) {if (args[i].equals("-wait")) {wait = true;} else if (args[i].equals("-c")) {testCase = extractClassName(args[(++i)]);} else if (args[i].equals("-m")) {String arg = args[(++i)];int lastIndex = stIndexOf('.');testCase = arg.substring(0, lastIndex);method = arg.substring(lastIndex + 1);} else if (args[i].equals("-v")) {System.err.println("JUnit " + Version.id() + " by Kent Beck and Erich Gamma");} else {testCase = args[i];}}if (testCase.equals(""))throw new Exception("Usage: TestRunner [-wait] testCaseName, where name is the name of the TestCase class");try{if (!method.equals(""))return runSingleMethod(testCase, method, wait);Test suite = getTest(testCase);return doRun(suite, wait);} catch (Exception e) {throw new Exception("Could not create and run test suite: " + e);}}protected TestResult runSingleMethod(String testCase, String method, boolean wait) throws Exception {Class testClass = loadSuiteClass(testCase).asSubclass(TestCase.class);Test test = TestSuite.createTest(testClass, method);return doRun(test, wait);}protected void runFailed(String message){System.err.println(message);System.exit(1);}public void setPrinter(ResultPrinter printer) {this.fPrinter = printer;}}package org.junit.rules;import java.io.File;import java.io.IOException;public class TemporaryFolder extends ExternalResource{private File folder;protected void before()throws Throwable{create();}。

Java游戏开发

Java游戏开发

(3)当需要从某个类继承或使用某个类及其措施时,使用
import引入该类旳定义。
(4)Java程序构成构造
package //0个或1个,必须放在文件开始
import //0个或多种,必须放在全部类定义之前
public classDefinition //0个或1个,文件名必须与类名
相同
classDefinition
三、Java语言旳特点
简朴性: 它摒弃了C++中许多低档、困难、轻易混同、
犯错或不经常使用旳功能 面对对象:程序 = 对象 + 消息。支持封装、
多态性和继承。
三、Java语言旳特点
可移植性: Java源程序经过编译器编译,会被转换成一
种我们称之为“字节码(byteˉcodes)”旳 目旳程序。“字节码”旳最大特点便是能够跨 平台运营,即程序设计人员们常说旳“编写一 次,到处运营”,正是这一特征成为Java得 以迅速普及旳主要原因。解释性:采用先经过 编译器编译、再利用解释器解释旳方式运营
目的和任务
两个真实旳Java游戏
本课程学完后要完毕旳两个Java游戏:
(1)贪吃蛇游戏 (2)电梯模拟游戏
学习过程
教师先简介本课程旳基本情况、学习内容和学习要求,然 后演示一种已完毕旳游戏程序,让学生明确学习目旳,产 生学习爱好。再简介Java基本知识和平台使用措施技巧。
环节一:了解课程旳基本情况和学习内容 环节二:小组讨论:手机里有什么常见旳游戏?(例如:
三、Java语言旳特点
高性能: 用Java语言编辑旳源程序旳执行措施是采用
先经过编译器编译、再利用解释器解释旳方式 来运营旳。它综合了解释性语言与编译语言旳 众多优点,使其执行效率较以往旳程序设计语 言有了大幅度旳提升。

学会使用Java编写控制台应用程序

学会使用Java编写控制台应用程序

学会使用Java编写控制台应用程序第一章:介绍控制台应用程序是一种在命令行界面下运行的程序,用户通过键入指令来与程序交互。

本章将介绍控制台应用程序的基本概念和特点。

控制台应用程序是Java编程语言的一种应用方式,它可以在不依赖于图形用户界面的情况下完成各种任务。

相比于图形界面程序,控制台应用程序更加灵活和高效。

第二章:环境搭建在学会编写Java控制台应用程序前,需要先搭建开发环境。

首先,需要安装Java Development Kit(JDK),并配置环境变量。

其次,选择一款好用的集成开发环境(IDE),如Eclipse或IntelliJ IDEA。

建议初学者使用Eclipse,因为它简单易用,同时也提供了丰富的功能和调试工具。

第三章:基本语法掌握Java的基本语法是编写控制台应用程序的关键。

在这一章节中,将介绍Java的数据类型、变量、运算符、条件判断和循环等基础知识。

这些基本概念是理解和编写控制台应用程序的基础。

第四章:输入和输出控制台应用程序需要与用户进行交互,因此输入和输出是必不可少的功能。

Java提供了一系列类和方法来实现输入和输出操作。

本章节将介绍如何使用Java的输入输出流(IOStream)来实现控制台输入和输出。

第五章:文件操作控制台应用程序常常需要读取和写入文件,以完成一些复杂的任务。

Java提供了File类来处理文件和目录。

本章节将介绍如何使用File类来进行文件的读写、创建、删除等操作。

第六章:异常处理在编写控制台应用程序时,难免会遇到一些错误和异常。

Java提供了异常处理机制来处理这些异常情况。

本章节将介绍如何使用try-catch语句来捕获和处理异常,以保证程序的稳定性和可靠性。

第七章:面向对象面向对象编程是Java编程的核心思想。

在控制台应用程序中,也可以充分应用面向对象的思想,使程序结构更加清晰和易于维护。

本章节将介绍面向对象编程的基本概念,如类、对象、继承、多态等。

电梯控制系统

电梯控制系统

5.9 电梯控制系统在前面几节中,讨论了用于实现单个UML图的基本技术。

现在,将演示如何将所有这些技术应用到实际问题中去。

下面是简化的电梯控制系统的描述。

电梯由门、监视器和电梯控制器组成。

电梯控制器负责控制电梯系统(如图5 -48所示中的类图)。

乘客通过按动每层楼的按钮或者电梯内的控制面板来与电梯系统进行交互。

一般来说,电梯停在楼宇的底层(第0层)。

如果乘客进入电梯并按了去第n层的按钮,电梯将升向第n层。

当电梯到达所请求的楼层的时候(也就是说第n层),它将打开门M秒钟,然后关上门。

电梯变成闲置。

图5-48 电梯控制系统的分析类图在第m层的乘客通过按动向上或者向下按钮请求电梯。

电梯将移向第m层,到达后打开门。

乘客想要到达某层,他可以通过按动电梯内控制面板上的按钮来根据分析类图和问题陈述,就可以开发顺序图进一步细化系统在不同场景中的动态行为。

然后可以使用顺序图来开发电梯控制系统的状态图,它是整个系统的控制对象。

下面是电梯控制系统的第一个场景。

5.9.1 场景1乘客Peter在楼宇底层进入电梯等待室。

他按动向上按钮并等待电梯到达。

当电梯到达的时候,电梯打开,他进入电梯并按动电梯内部控制面板上的第6层按钮。

电梯关闭并向上升起直至到达第6层。

电梯打开,Peter走出电梯。

电梯等待片刻(10秒钟),关闭然后再次向下到达底层。

电梯将呆在底层等待与其他用户交互。

如图5-49所示为第一个场景的顺序图。

通过仔细考察这个场景中事务序列中的每个步骤,可以开发出这幅图。

对于每一个步骤,参与者执行了某个动作,系统相应地进行响应。

参与者的输入和系统的响应将有助于确定系统内部需要执行哪些内部动作。

参与者的输入被边界对象接收。

然后边界对象发送一条消息给控制对象以处理参与者的输入。

控制对象需要向实体对象发送一条或者多条消息,执行实际的请求动作。

最后,控制对象将向边界对象发送消息,以响应参与者。

下面是这个场景的动作序列。

●Peter在楼宇底层按动向上按钮。

java 例子程序

java 例子程序

java 例子程序Java是一种广泛应用于开发各种类型应用程序的计算机编程语言。

它具有跨平台性、面向对象的特点,广泛应用于企业级应用开发、移动应用开发、嵌入式系统开发等领域。

下面将列举10个Java例子程序,以展示Java语言的一些常见用法和功能。

1. 计算两个数的和```javapublic class Sum {public static void main(String[] args) {int num1 = 10;int num2 = 20;int sum = num1 + num2;System.out.println("两个数的和为:" + sum);}}```这个例子程序演示了如何在Java中进行基本的数学运算,并通过标准输出打印结果。

2. 判断一个数是否为偶数```javapublic class EvenNumber {public static void main(String[] args) {int num = 6;if (num % 2 == 0) {System.out.println("该数是偶数");} else {System.out.println("该数不是偶数");}}}```这个例子程序展示了如何使用条件语句判断一个数是否为偶数,并根据判断结果输出相应的信息。

3. 求一个数组的平均值```javapublic class Average {public static void main(String[] args) {int[] arr = {5, 10, 15, 20, 25};int sum = 0;for (int i = 0; i < arr.length; i++) {sum += arr[i];}double average = (double) sum / arr.length;System.out.println("数组的平均值为:" + average);}}```这个例子程序演示了如何使用循环结构计算一个数组的平均值,并将结果打印出来。

电梯调度算法---SCAN算法

电梯调度算法---SCAN算法

电梯调度算法---SCAN算法请珍惜⼩编劳动成果,该⽂章为⼩编原创,转载请注明出处。

扫描(SCAN)调度算法:总是从磁臂当前位置开始,沿磁臂的移动⽅向去选择离当前磁臂最近的那个柱⾯的访问者。

如果沿磁臂的⽅向⽆请求访问时,就改变磁臂的移动⽅向。

采⽤这种调度算法,需要为访问者设置两个队列,根据磁头的移动⽅向,能访问到的访问者由近及远排队,背离磁头移动⽅向的访问者也由近及远排为另⼀队。

先按磁头移动⽅向队列调度访问者访问磁盘,当该⽅向没有访问者时,再改变⽅向,选择另⼀个访问者队列访问磁盘。

java代码实现:import java.util.Scanner;public class SCAN {int visitAdd[];int visitSub[];int index=0; //存放下标,已排序序列中找到⽐它⼤的最⼩值的下标public void scan(int data[],int begin,int direction){int temp=0;//从⼩到⼤排序for(int i=0;i<data.length;i++){for(int j=i;j<data.length;j++){if(data[i]>data[j]){temp=data[i];data[i]=data[j];data[j]=temp;}}}for(int i=0;i<data.length;i++){if(data[i]>begin){ //在已排序序列中找到⽐它⼤的最⼩值的下标index=i;break;}}//⽐起始位置⼩的visitSub=new int[index]; //⽐他⼩的共有index个for(int i=0;i<index;i++){visitSub[i]=data[i];}//⽐起始位置⼤的visitAdd=new int[data.length-index]; //⽐他⼤的共data.length-index个for(int i=0;i<visitAdd.length;i++){visitAdd[i]=data[i+index];}//计算平均时间int lengthAdd=0;int lengthSub=0;int length=0;for(int i=0;i<visitAdd.length-1;i++){lengthAdd+=Math.abs(visitAdd[i]-visitAdd[i+1]);}for(int i=visitSub.length-1;i>0;i--){lengthSub+=Math.abs(visitSub[i]-visitSub[i-1]);}length=lengthAdd+lengthSub+Math.abs(begin-visitAdd[0])+Math.abs(begin-visitSub[visitSub.length-1]);if(direction==0){ //找⼩的for(int i=visitSub.length-1;i>=0;i--){System.out.print(visitSub[i]+" ");}//回转for(int i=0;i<visitAdd.length;i++){System.out.print(visitAdd[i]+" ");}length+=Math.abs(visitSub[0]-begin);}else{ //找⼤的for(int i=0;i<visitAdd.length;i++){System.out.print(visitAdd[i]+" ");}//回转for(int i=visitSub.length-1;i>=0;i--){System.out.print(visitSub[i]+" ");}length+=Math.abs(visitAdd[visitAdd.length-1]-begin);}System.out.println("平均寻道长度为"+length/data.length);}public static void main(String[] args) {SCAN scan=new SCAN();Scanner scanner=new Scanner(System.in);System.out.println("请输⼊数据个数");int num=scanner.nextInt();System.out.println("请⼀次输⼊数据,空格隔开");int data[]=new int[num];for(int i=0;i<num;i++){data[i]=scanner.nextInt();}System.out.println("请输⼊读写头起始位置");int begin=scanner.nextInt();System.out.println("请输⼊磁头移动⽅向 0:磁道减少⽅向 1:磁道增加⽅向 "); int direction=scanner.nextInt();scan.scan(data, begin, direction);}//98 183 37 122 14 124 65 67}测试:版权声明:本⽂为博主原创⽂章,未经博主允许不得转载。

可编程控制(PLC)电梯的程序以及梯形图、详细解释

可编程控制(PLC)电梯的程序以及梯形图、详细解释

电气可编程控制原理与应用(PLC)的实验报告实验人员:陶建美日期:2011年6月21日实验项目:电梯控制报告框架(Ctrl+点击该链接,即可转入相应模块)一、实验目的与要求二、实验设备三、实验内容四、实验过程1、电梯的基本构造2、PLC的基本结构3、PLC的工作原理4、电梯控制构成5、输入输出(I/O)端口功能分配表6、程序执行流程图7、梯形图(1)定时器T0 (2)一楼的控制(3)二楼的控制(4)三楼的控制(5)四楼的控制(6)确定电梯楼层位置(7)电梯趋势确定(8)电梯上行程序(9)电梯下行程序8、指令表五、问题与解决方案六、实验总结与心得体会电气可编程控制原理与应用(PLC)的实验报告电梯控制一、实验目的与要求1、运用所学基本理论、基本知识和基本技能,分析与解决实际问题的能力,通过设计掌握控制PLC控制系统的基本设计方法和应用。

2、设计出一个四层楼电梯控制。

3、完成并实现实验内容的基本功能要求。

二、实验设备计算机、PLC可编程控制器、FXGPWIN应用软件三、实验内容1、四层楼电梯基本设计2、停止有刹车及保险止降装置3、根据楼层请求上下,先来优先4、请求与趋势同优先5、楼内可以撤销楼内请求四、实验过程1、电梯的基本构造电梯是一种特殊的起重运输设备,由桥厢及配重、拖动机及减速传动机械、井道及井道设备、召唤系统及安全装置构成。

桥厢是载人或装货的部位,配重是为了改变电梯电机负载的特性以提高电梯安全性而设置的。

下图是电梯拖动系统示意图,图中可见电梯的桥厢及配重分系在钢丝绳的两端,钢丝绳跨挂在曳引轮上,曳引轮经减速机构由电机拖动,形成桥厢的上下运动。

2、PLC的基本结构从结构上分,PLC分为固定式和组合式(模块式)两种。

固定式PLC包括CPU板、I\O板、内存板、电源等,这些元素组成一个不可拆卸的整体。

模块式PLC包括CPC模块、I\O模块、电源模块、地板或支架,这些模块可以按照一定规则组合配置。

3、PLC的工作原理当PLC投入运行后,其工作过程一般分为三个阶段,即输入采样、用户程序执行和输出刷新三个阶段。

电梯程序源代码

电梯程序源代码

#ifndef CELEVATOR_H#define CELEVATOR_Hconst int MostLayers = 100;class CElevator{public:CElevator();//构造函数CElevator(int uLayers, int lLayers);//构造函数CElevator(CElevator &myElevator);//拷贝构造函数void PressOuterButton(int direction, int floor);//电梯外部各楼层操作按钮void PressInnerDigitalButton(int floor);//电梯内部数字按钮void PressOpen_CloseButton(int operate);//电梯内部开合控制按钮void PressAlert();//电梯内部报警按钮void run();//电梯运行~CElevator();//析构函数protected:void OpenElevator();//打开电梯void CloseElevator();//关闭电梯void UserOperate();//由于程序单线程运行,因此将用户的所有操作集中在每一层停止的时候完成。

const int UpperLayers; //电梯最高能到达的楼层const int LowerLayers; //电梯最低能到达的楼层int States[5]; //电梯当前状态,States[0]表示运行或停止,0停止,1运行,初值0;States[1]表示当前所在楼层,初值1;States[2]表示运行方向,向上0,向下1,初值0;States[3]表示开合,0开,0合,初值1;States[4]表示是否故障,0正常,1故障,初值1int DigitalButton[MostLayers];//整形数组,i为楼层且i!=0,i<0时下标iLowerLayers表示电梯内地下i楼层按钮是否被按下,i>0,i-LowerLayers-1表示电梯内地上i楼层按钮是否被按下,0未按,1按下int OuterDownButton[MostLayers];//整形数组,i为楼层且i!=0,i<0时下i-LowerLayers表示电梯外i层向下按钮是否被按下,i>0i-LowerLayers-1表示电梯外i层向下按钮是否被按下,0未按,1按下int OuterUpButton[MostLayers];//整形数组,i为楼层且i!=0,i<0时下标iLowerLayers表示电梯外i层向上按钮是否被按下,i>0,i-LowerLayers-1表示电梯外i层向上按钮是否被按下,0未按,1按下};#endif二:CElevator.cpp文件内容#include<iostream>#include "CElevator.h"using namespace std;CElevator::CElevator():UpperLayers(10),LowerLayers(1){States[0] = 0; //初始状态为停止States[1] = 1;//初始楼层在楼States[3] = 1;//初始电梯为合States[4] = 0;//初始电梯正常for(int i=0;i<MostLayers;i++){DigitalButton[i] = 0;OuterDownButton[i] = 0;OuterUpButton[i] = 0;}}CElevator::CElevator(int uLayers, int lLayers):UpperLayers(uLayers),LowerLayers(lLayers) {States[0] = 0; //初始状态为停止States[1] = 1;//初始楼层在楼States[2] = 0;//初始方向为向上States[3] = 1;//初始电梯为合States[4] = 0;//初始电梯正常for(int i=0;i<MostLayers;i++){DigitalButton[i] = 0;OuterDownButton[i] = 0;OuterUpButton[i] = 0;}}CElevator::CElevator(CElevator&myElevator):UpperLayers(myElevator.UpperLayers),LowerLayers( myElevator.LowerLayers) {States[0] = myElevator.States[0];States[1] = myElevator.States[1];States[2] = 0;//初始方向为向上States[3] = 1;//初始电梯为合States[4] = 0;//初始电梯正常for(int i=0;i<MostLayers;i++){DigitalButton[i] = 0;OuterDownButton[i] = 0;OuterUpButton[i] = 0;}}CElevator::CElevator(int uLayers, int lLayers):UpperLayers(uLayers),LowerLayers(lLayers) {States[0] = 0; //初始状态为停止States[1] = 1;//初始楼层在楼States[2] = 0;//初始方向为向上States[4] = 0;//初始电梯正常for(int i=0;i<MostLayers;i++){ DigitalButton[i] = 0;OuterDownButton[i] = 0;OuterUpButton[i] = 0;}}CElevator::CElevator(CElevator &myElevator): UpperLayers(myElevator.UpperLayers),LowerLayers(myElevator.LowerLayers){States[0] = myElevator.States[0];States[1] = myElevator.States[1];States[2] = myElevator.States[2];States[3] = myElevator.States[3];States[4] = myElevator.States[5];for(int i=0;i<MostLayers;i++){DigitalButton[i] = myElevator.DigitalButton[i];OuterDownButton[i] = myElevator.DigitalButton[i];OuterUpButton[i] = myElevator.DigitalButton[i];}}CElevator::~CElevator(){}void CElevator::PressOuterButton(int direction, int floor){if(direction==0)OuterUpButton[floor-LowerLayers-1] = 1;elseOuterDownButton[floor-LowerLayers-1] = 1;}void CElevator::PressInnerDigitalButton(int floor){DigitalButton[floor-LowerLayers-1] = 1;}void CElevator::PressOpen_CloseButton(int operate){if(operate == 0)//打开电梯{OpenElevator();}else//关闭电梯{CloseElevator();}}void CElevator::OpenElevator(){if(States[3] == 0){cout<<"电梯已打开,请先出后进!"<<endl<<endl;}else{cout<<"电梯正在打开…电梯已打开,请先出后进!"<<endl<<endl; States[3] = 0;}}void CElevator::CloseElevator(){if(States[3] == 1){ cout<<"电梯已关闭,请保持安静!"<<endl<<endl;}else{cout<<"电梯正在关闭…电梯已关闭,请保持安静!"<<endl<<endl; States[3] = 1;}}void CElevator::PressAlert(){cout<<"电梯内部有人报警,请援助!"<<endl;States[4] = 1;}void CElevator::UserOperate(){//按报警按钮int alm = 0;cout<<"按报警按钮吗?输入1表示按,0表示不按:";cin>>alm;cout<<endl;if(alm==1){States[4] = 1;while(States[4]==1){cout<<"电梯出现故障,请维修!维修好请输入0,维修不好请输入1!cin>>alm;cout<<endl;if(alm == 0 || alm ==1){States[4] = alm;}else{cout<<"维修数据不正确!"<<endl;}}}OpenElevator();//电梯内部输入到达楼层cout<<"请电梯内乘客输入所要到达的楼层!"<<endl;cout<<"多个楼层中间用空格隔开,结束输入0:";int floor = 1;while(true){cin>>floor;if(floor==0){break;}if((floor>=LowerLayers) && (floor<=UpperLayers) && (floor!=States[1])) {if(floor<0)//地下{DigitalButton[floor-LowerLayers] = 1;}else//地上{DigitalButton[floor-LowerLayers-1] = 1;//没有楼}}}cout<<endl;//电梯外部各楼层输入上楼信号cout<<"请电梯外部乘客输入上楼信号!"<<endl;cout<<"多个楼层用空格隔开,结束输入0:";while(true){cin>>floor;if(floor==0){break;}else{if((floor>=LowerLayers) && (floor<UpperLayers) &&(floor!=States[1])){if(floor<0)//地下{OuterUpButton[floor-LowerLayers] = 1;}else//地上{OuterUpButton[floor-LowerLayers-1] = 1;//没有楼}}}}cout<<endl;//电梯外部各楼层输入下楼信号cout<<"请电梯外部乘客输入下楼信号,"<<endl;cout<<"多个楼层用空格隔开,结束输入0:";while(true){cin>>floor;if(floor==0){break;}else{if((floor>LowerLayers) && (floor<=UpperLayers) && (floor!=States[1])) {if(floor<0)//地下{OuterDownButton[floor-LowerLayers] = 1;}else//地上{OuterDownButton[floor-LowerLayers-1] = 1;//没有楼}}}cout<<endl;//按开电梯按钮int direction = 0;cout<<"电梯将要关闭,等人请按打开按钮!"<<endl;cout<<"输入1表示按,表示0不按:";cin>>direction;cout<<endl;if(direction==1){OpenElevator();for(int i=0;i<50;i++);//延时CloseElevator();}//按关电梯按钮cout<<"按关电梯按钮吗?输入1表示按,表0不按:";cin>>direction;cout<<endl;if(direction==0){for(int i=0;i<50;i++);//延时CloseElevator();}else{CloseElevator();}}void CElevator::run(){while(true){if(States[0]==0){cout<<"电梯停在"<<States[1]<<"层!"<<endl;if(States[2]==0)//向上{if(States[1]<0)//地下{OuterUpButton[States[1]-LowerLayers] = 0;//将记录电梯States[1]层有向上的标志取消DigitalButton[States[1]-LowerLayers] = 0;//将记录电梯在States[1]层停靠的标志取消else//地上{OuterUpButton[States[1]-LowerLayers-1] = 0;//将记录电梯States[1]层有向上的标志取消DigitalButton[States[1]-LowerLayers-1] = 0;//将记录电梯在States[1]层停靠的标志取消}}else//向下{if(States[1]<0)//地下{OuterDownButton[States[1]-LowerLayers] = 0;//将记录电梯States[1]层有向下的标志取消DigitalButton[States[1]-LowerLayers] = 0;//将记录电梯在States[1]层停靠的标志取消}else//地上{OuterDownButton[States[1]-LowerLayers-1] = 0;//将记录电梯States[1]层有向下的标志取消DigitalButton[States[1]-LowerLayers-1] = 0;//将记录电梯在States[1]层停靠的标志取消}}if(States[1]==1){cout<<"终止电梯程序运行吗?终止输入1,继续运行输入0:";int temp = 0;cin>>temp;if(temp==1){exit(0);}}cout<<endl;UserOperate();States[0] = 1;}else{if(States[2]==0)//向上{States[1]++;if(States[1]==0){States[1]++;//没有层}else{cout<<"电梯向上运行,将要到达"<<States[1]<<"层!"<<endl<<endl;if(States[1]==UpperLayers)//向上到最顶,必定要停,且方向变为向下{States[2] = 1;//变方向States[0] = 0;}else{if(OuterUpButton[States[1]-LowerLayers-1]==0 && DigitalButton[States[1]-LowerLayers-1]==0) {cout<<"没有乘客在"<<States[1]<<"层上下,电梯继续向上运行!"<<endl<<endl;}else{States[0] = 0;}}}}else//向下{States[1]--;if(States[1]==0){States[1] = -1;//没有层}else{cout<<"电梯向下运行,将要到达"<<States[1]<<"层!"<<endl<<endl;if(States[1]==LowerLayers)//向下到最底,必定要停,且方向变为向上{States[2] = 0;//变方向States[0] = 0;}else{if(OuterDownButton[States[1]-LowerLayers-1]==0 && DigitalButton[States[1]-LowerLayers-1]==0) {cout<<"没有乘客在"<<States[1]<<"层上下,电梯继续向下运行!"<<endl<<endl;}else{States[0] = 0;}}}}}}}三:main.cpp主函数文件内容#include <iostream>#include "CElevator.h"using namespace std;#include "CElevator.h"void main(){CElevator myElevator(8,-3); myElevator.run();}。

三层电梯PLC控制系统设计含程序

三层电梯PLC控制系统设计含程序

三层电梯PLC控制系统设计含程序电梯是现代建筑中常用的垂直交通设备,通过PLC控制系统实现对电梯的控制和管理,可以提高电梯的运行效率和安全性。

本文将针对一个三层电梯进行PLC控制系统的设计,包括电梯的运行逻辑和程序实现。

一、电梯运行逻辑设计1.状态监测a.电梯位置检测:通过位置传感器检测电梯所在楼层,可以确定电梯的位置信息。

b.门开关状态检测:通过开关传感器检测电梯门的打开和关闭状态,可以确定电梯门是打开还是关闭。

2.运行控制a.开门控制:当电梯到达指定楼层且电梯门关闭时,接收外部开门信号时,电梯门打开。

b.闭门控制:当电梯门打开一段时间后,自动闭门。

c.电梯上行控制:当外部调用上行时,电梯按照最优路线上行到指定楼层。

d.电梯下行控制:当外部调用下行时,电梯按照最优路线下行到指定楼层。

e.紧急停止控制:当电梯发生故障或紧急情况时,立即停止电梯运行。

二、PLC程序设计1.状态监测程序设计a.电梯位置检测程序:通过读取位置传感器的状态信号,将电梯所在楼层信息反馈给PLC程序。

b.门开关状态检测程序:通过读取开关传感器的状态信号,判断电梯门的打开和关闭状态。

2.运行控制程序设计a.开门控制程序:当电梯到达指定楼层且电梯门关闭时,接收外部开门信号时,将开门信号发送给电梯门控制装置。

b.闭门控制程序:当电梯门打开一段时间后,将闭门信号发送给电梯门控制装置。

c.电梯上行控制程序:当外部调用上行时,根据当前电梯的位置信息,计算最优路线,并将上行信号发送给电梯运行控制装置。

d.电梯下行控制程序:当外部调用下行时,根据当前电梯的位置信息,计算最优路线,并将下行信号发送给电梯运行控制装置。

e.紧急停止控制程序:当发生故障或紧急情况时,立即发送停止信号给电梯运行控制装置。

3.整体控制程序设计a.状态监测程序和运行控制程序的输出以及传感器的输入通过PLC的I/O模块进行连接。

b.PLC基于状态监测程序和运行控制程序,根据输入信号进行逻辑运算,并根据运行控制程序的结果,控制电梯门和电梯的运行。

java流程控制案例

java流程控制案例

java流程控制案例下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。

文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor. I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!案例:计算学生成绩的平均值1. 需求分析:输入学生的成绩。

计算成绩的平均值。

电梯控制程序源代码(带流程图-功能分解、源代码)

电梯控制程序源代码(带流程图-功能分解、源代码)

《综合电子创新训练》研究报告研究题目:CTS1600-1控制技术综合试验院系名称:专业名称:学生姓名:指导教师:xxxx年 xx月 xx日xxxxxxxxxx目录第一章绪论 (1)1.1课题背景与目的 (1)1.2课题研究方法 (1)第二章电梯模型硬件设备 (2)2.1 实验单片机模型与接口定义 (2)2.1.1 实验用单片机 (2)2.1.2 单片机接口定义 (3)2.1.3 I/O接口DATA控制命令表 (4)2.2 电梯控制命令说明 (6)2.3 实验用电梯模型 (9)第三章与电梯模型相关的实验程序 (10)3.1数码管连续显示 (10)3.1.1 程序流程图 (10)3.1.2 功能简介 (11)3.1.3 功能实现过程 (11)3.1.4 问题的解决及收获 (11)3.2 外部按键灯连续闪烁 (12)3.2.1 程序流程图 (12)3.2.2 功能简介 (12)3.2.3 功能实现过程 (12)3.2.4 问题的解决及收获 (13)I3.3 键、灯、数码管 (14)3.3.1 程序流程图 (14)3.3.2 功能简介 (14)3.3.3 功能实现过程 (14)3.3.4 问题的解决及收获 (15)3.4 外部按键上下行 (16)3.4.1 程序流程图 (16)3.4.2 功能简介 (17)3.4.3 功能实现过程 (17)3.4.4 问题的解决及收获 (18)3.5 计算器 (19)3.5.1 程序流程图 (19)3.5.2 功能简介 (21)3.5.3 功能实现过程 (21)3.5.4 问题的解决及收获 (22)3.6 密码锁 (23)3.6.1程序流程图 (23)3.6.2功能简介 (24)3.6.3实现功能过程 (24)3.6.4问题的解决及收获 (24)3.7逐层停自动开关门循环 (25)3.7.1程序流程图 (25)3.7.2功能简介 (27)3.7.3实现功能过程 (27)II3.8 可记录顺序逐层停自动开关门 (28)3.8.1程序流程图 (28)3.8.2功能简介 (29)3.8.3实现功能过程 (29)3.8.4问题的解决及收获 (29)3.9 外部按键电梯 (30)3.9.1 主程序 (30)3.9.2 开关门模块 (31)3.9.3 上下行模块 (32)3.9.4 LED模块 (34)第四章电梯模型完整控制程序 (36)4.1 完整控制程序(main函数) (36)4.1.1 功能说明 (36)4.1.2 功能实现过程 (37)4.1.3 问题的解决及收获 (37)4.2 按键扫描模块(getto函数) (38)4.2.1功能简介 (38)4.2.2 问题的解决及收获 (38)4.3 当前层判断模块(getat函数) (38)4.3.1 功能简介 (38)4.3.2 问题的解决及收获 (38)4.4 电梯门的选通、禁止模块(DoorEnable函数) (38)4.4.1 功能简介 (38)III4.5 电梯开关门模块(openandclose函数) (39)4.5.1 功能简介 (39)4.5.2 功能实现过程 (39)4.5.3 问题的解决及收获 (39)第五章总结与致谢 (41)5.1 总结 (41)5.2 致谢 (41)附录控制电梯模型相关程序 (42)附录一数码管连续显示 (42)附录二外部按键灯连续闪烁 (43)附录三外部按键逐个亮灭 (45)附录四键、灯、数码管 (47)附录五外部按键上下行 (49)附录六计算器 (51)附录七密码锁 (56)附录八逐层停开关门循环 (59)附录九可记录顺序逐层停自动开关门 (64)附录十外部按键电梯 (70)附录十一完整电梯程序 (77)IV图目录Figure 1 凌阳单片机 (2)Figure 2 凌阳单片机接口定义 (3)Figure 3 实验用电梯模型 (9)Figure 4 数码管连续显示流程图 (10)Figure 5 外部按键灯连续闪烁流程图 (12)Figure 6 LED1to7流程图 (13)Figure 7 键、灯、数码管流程图 (14)Figure 8 外部按键上下行流程图 (16)Figure 9 计算器数字扫描函数流程图 (19)Figure 10 计算器主函数流程图 (20)Figure 11 密码锁流程图 (23)Figure 12 逐层停自动开关门循环main函数 (25)Figure 13 逐层停自动开关门循环AtAndTo函数 (26)Figure 14 逐层停自动开关门循环OpenAndClose函数 (26)Figure 15 可记录顺序逐层停自动开关门 (28)Figure 16 外部按键电梯主函数流程图 (30)Figure 17 外部按键电梯开关门函数流程图 (31)Figure 18 外部按键电梯上下行函数流程图 (32)Figure 19 外部按键电梯LED函数流程图 (34)Figure 20 外部按键电梯btLED函数流程图 (35)Figure 21 电梯完整程序主函数 (36)Figure 22 电梯完整程序openandclose函数流程图 (39)V第一章绪论1.1课题背景与目的现代社会中,电梯已经成为不可缺少的运输设备。

java状态模式举例

java状态模式举例

java状态模式举例状态模式(State Pattern)是一种行为型设计模式,它允许对象在其内部状态发生变化时改变其行为。

状态模式将不同的状态抽象为状态类,对象在不同状态下可以执行不同的操作。

以下是一个简单的Java状态模式的示例,用于表示电梯的状态变化。

首先,定义一个状态接口`State`,它包含电梯状态的方法,如`open()`、`close()`、`run()` 和`stop()`:```javainterface State {void open();void close();void run();void stop();}```然后,创建具体状态类,如`OpenState`、`CloseState`、`RunState` 和`StopState`,它们实现了`State` 接口,并根据不同状态执行相应的操作:```javaclass OpenState implements State {@Overridepublic void open() {System.out.println("The door is already open.");}@Overridepublic void close() {System.out.println("Closing the door.");}@Overridepublic void run() {System.out.println("The elevator is running.");}@Overridepublic void stop() {System.out.println("Stopping the elevator.");}}class CloseState implements State {@Overridepublic void open() {System.out.println("Opening the door.");}@Overridepublic void close() {System.out.println("The door is already closed.");}@Overridepublic void run() {System.out.println("The elevator is running.");}@Overridepublic void stop() {System.out.println("Stopping the elevator.");}}class RunState implements State {@Overridepublic void open() {System.out.println("Cannot open the door while the elevator is running.");}@Overridepublic void close() {System.out.println("Cannot close the door while the elevator is running.");}@Overridepublic void run() {System.out.println("The elevator is already running.");}@Overridepublic void stop() {System.out.println("Stopping the elevator.");}}class StopState implements State {@Overridepublic void open() {System.out.println("Opening the door.");}@Overridepublic void close() {System.out.println("Closing the door.");}@Overridepublic void run() {System.out.println("Starting the elevator.");}@Overridepublic void stop() {System.out.println("The elevator is already stopped.");}}```接下来,创建一个上下文类`Elevator`,它包含当前状态,并提供接口以改变状态:```javaclass Elevator {private State state;public Elevator() {state = new StopState();}public void setState(State state) {this.state = state;}public void open() {state.open();}public void close() {state.close();}public void run() {state.run();}public void stop() {state.stop();}}```最后,在客户端代码中,您可以创建电梯对象并根据不同的状态执行操作:```javapublic class Main {public static void main(String[] args) {Elevator elevator = new Elevator();elevator.open();elevator.close();elevator.run();elevator.stop();elevator.setState(new OpenState());elevator.open();}}```在这个示例中,状态模式允许电梯在不同状态下执行不同的操作,而无需在客户端代码中编写复杂的条件语句。

请简单的描述JAVA程序运行机制

请简单的描述JAVA程序运行机制

请简单的描述JAVA程序运行机制Java是一种跨平台的编程语言,它的程序运行机制是通过Java虚拟机(JVM)来实现的。

Java程序的运行过程可以分为编写源代码、编译、加载与验证、执行和垃圾回收几个步骤。

第一步是编写源代码。

Java程序员使用Java语言编写代码,代码文件以.java为扩展名。

Java程序通过类和对象的方式组织,一个Java程序可以包含一个或多个类。

第二步是编译。

Java源代码需要通过Java编译器将其转换为字节码文件。

字节码文件以.class为扩展名,它包含了被编译的Java代码。

Java编译器将源代码转换为字节码,这个过程会进行语法检查和编译优化。

第三步是加载与验证。

在程序运行之前,JVM需要将字节码文件加载到内存中。

这个过程包括类加载和验证。

类加载器会负责将字节码文件加载到内存中,并创建对应的Class对象。

在加载过程中,JVM会对字节码进行验证,确保它符合Java虚拟机规范。

第四步是执行。

一旦字节码文件被加载到内存中,JVM会将字节码解释或者编译成本地代码,并执行。

解释器会逐行解释字节码指令并执行,而即时编译器会将字节码转换为本地机器代码,提高程序的执行效率。

在执行过程中,Java虚拟机会管理程序的内存、线程和IO等资源。

它会为每个线程分配堆栈内存和栈帧,用于存储局部变量和方法调用信息。

JVM还提供了丰富的库和工具,用于管理和监控程序的运行状态。

最后一步是垃圾回收。

Java虚拟机通过自动内存管理(Garbage Collection)来处理程序中不再使用的对象。

当一个对象不再被引用时,垃圾回收器会将其标记为垃圾并回收它所占用的内存空间,以便后续的对象可以使用。

总结来说,Java程序运行机制是通过Java虚拟机来实现的。

它将Java源代码编译成字节码文件,加载到内存中并验证,在执行过程中管理资源,最后通过垃圾回收机制释放不再使用的内存。

这种机制使得Java程序具有跨平台的特性,可以在不同的操作系统和硬件上运行。

四层电梯程序带注释

四层电梯程序带注释

如图4.1所示,厅外召唤指令具有登记指示,到层取消。

以网络3三楼下呼为例,当外召唤下呼I1.4信号输入,且电梯不在三层(即M4.2不动作)时,Q1.4形成自己锁,保持并显示外信号登记状态,而当电梯到达到三层时,M4.2的触点动作,并且当电机在反转下行时(电梯上行经三层不消除下行信号)Q0.2和Q1.4都将断开,消除信号。

图4.1 外召唤信号的登记及消除程序段4.4.2内指令信号的等级及消除如图4.2所示,电动内呼按钮以内呼一楼为例,形成I0.4输入信号自锁并登记显示。

当轿厢到达一楼,一层平层信号I0.0将断Q0.4使内呼信号取消。

如此就达到了内呼信号登记显示,以及电梯平层后内呼信号取消。

另外,本系统设一楼为基站,两分钟内无任何操作,电梯自动返回一楼。

如图4.2中网络11所示,当电机无正反转120秒即2分钟网络7中T40触点闭合,自动内呼一楼,随即电梯返回一楼。

图4.2 内指令信号登记及消除程序段4.4.3电梯的平层处理信号如图4.3所示,当电梯平层时,由辅助继电器来给辅助例如停车信号,登记消除,开始接收上、下行信号记忆等平层需要处理的动作。

图4.3 电梯的平层信号处理程序段4.4.4选层定向及忽略反向截梯如图4.4所示,电梯的上行主程序和下行主程序类似,以上行来说,上行要进行确定电梯上行目标层程序的调用,在上行状态接通,但电梯同时不处于下行状态,保证电梯处于上行状态时电梯才执行这一段程序段,在PLC 的每一个扫描周期其上行程序都要调用确定上行最近目标层的程序,以便更改电梯的目标层[20]。

轿厢上行如图4.4a所示,网络16-19共同组成电梯内、外呼所接收的上行信号。

而网络21所示,上行记忆信号即电机在正转,上行形成自锁记忆,当电机反转或轿厢到达四层时断开。

上行记忆信号是辅助电梯进行反向不能截梯动作的信号,我们可以看到网络20中,有上行信号M2.0和上行记忆信号Q0.0电梯就会上行,无视反向信号截梯。

(整理)电梯调度算法模拟

(整理)电梯调度算法模拟

精品文档1.电梯调度算法模拟说明:电梯调度算法的基本原则就是如果在电梯运行方向上有人要使用电梯则继续往那个方向运动,如果电梯中的人还没有到达目的地则继续向原方向运动。

具体而言,如果电梯现在朝上运动,如果当前楼层的上方和下方都有请求,则先响应所有上方的请求,然后才向下响应下方的请求;如果电梯向下运动,则刚好相反。

题目难度:较难设计要求:模拟多人在不同楼层同时要求到各自目的地时电梯的响应顺序,要求使用C 语言编程,定义合适的数据结构。

最后,需要说明设计思想,同时给出能够运行的源程序,并给出对应的程序流程图。

设计提示:可以用一个结构体表示乘电梯的人,其中内容包括人的姓名、起始楼层、目的楼层;建立一个结构体的数组模拟当前所有需要乘电梯的人。

把这个结构体数组作为程序的输入,通过对数组中每个人的起始楼层和目的楼层进行分析,确定每个人进出电梯的顺序,并打印输出。

比如:当前楼层是4,结构体数组中共有3个人,A:7 →3 B:6→10 C:7→8;则输出应该是:当前楼层为6,B进入当前楼层为7,C进入当前楼层为8,C出去当前楼层为10,B出去当前楼层为7,A进入当前楼层为3,A出去2.迷宫求解说明:求迷宫从入口到出口的路径,即从迷宫的入口出发,顺某一方向向前探索,若能走通,则继续往前走;否则沿原路退回,换一个方向继续探索,直到所有可能的通路都探索为止。

题目难度:一般设计要求:给出迷宫的入口和出口及相关的通路,求出从入口到出口的路径。

要求使用C语言编程,定义合适的数据结构。

最后,需要说明设计思想,同时给出能够运行的源程序,并给出对应的程序流程图。

设计提示:可以使用一个二维数组来表示迷宫,其中分别用1、0表示通与不通;算法的基本思想是:若当前位置“可通”,则纳入“当前路径”,并继续朝“下一位置”探索,即切换“下一位置”为“当前位置”,如此重复,到达出口;若当前位置“不可通”,则应顺着“来向”退回到“前一通道块”,然后朝“来向”之外的其它方向探索。

电梯调度设计分析

电梯调度设计分析

电梯调度设计分析电梯调度设计分析⼀、设计分析1. 单部多线程电梯傻⽠调度(FAFS)这次作业需要模拟⼀个多线程实时电梯系统,需要实现⼈员的运输与进出电梯以及电梯的开关门。

由于这次作业中并没有性能分的要求,所以只需要完成最基础的运输操作就可以在这次作业中取得满分,换句话说第五次作业⼏乎是⼈⼈满分。

我的程序架构中,使⽤了两个线程,输⼊线程和电梯线程,同时还有⼀个请求队列的类,⽤于管理新来的请求和把请求传递给电梯,利⽤ FAFS (先来先服务)的原则,可以很好的实现电梯的架构下⾯是我这次作业程序的 UML 类图:从类图中可以发现,Elevator和InputQueue是两个继承了run()⽅法的线程类,其他的类都是辅助这两个类进⾏的构建。

Method 复杂度分析:Class 复杂度分析这两者的复杂度都算控制得⽐较正常。

2. 单部多线程可捎带调度电梯(ALS)第⼆次电梯作业,需求相较于第⼀次增加了时间的要求,需要我们在运⾏过程中增加“可捎带”的能⼒,当然,作业需求并没有限制我们捎带的⽅式,⽽是通过运⾏总时间的限制来确保我们对电梯调度进⾏了优化,我认为这是⾮常好的限制⽅式,因为这样我们可以⼤胆发挥,在时间允许的情况下可以使⽤任何的优化策略。

第⼆次的代码架构,我在第⼀次作业的基础上只修改了需求队列的模块和电梯线程的模块,因为输⼊模块和第⼀次并⽆不同。

优化的策略我采⽤了 SSTF (寻找最短时间优先)的策略,如果电梯中没有⼈,我将会从需求队列中取出运⾏时间最少的⼈作为⾸选,同时在去接他的路途中检查是否可以捎带;如果电梯中有⼈,我会选取所需时间最少的那个⼈作为优先服务的⼈,然后在路途中寻找捎带,⼀旦电梯中的⼈员发⽣变化,我会重复上述的两种查找主请求的⽅式,知道请求队列为空。

因为这次作业设计的线程交互⽐上次更复杂了,所以我在请求队列的“查找”、“输⼊”、“输出” 的⽅法前加上了synchronized修饰词来保证线程安全。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档