用Java实现电梯系统
标题如果输入的层数既有比当前楼层低又有比当前楼层高的话就进行先上升后下降,以下是运行的结果。
图片:
插入一段漂亮的代码片
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class Lifter extends Thread{
//程序入口
public static void main (String args[]) throws InterruptedException {
Lifter lifter = new Lifter();
lifter.go();
}
int flag=0;//0代表之只上升或者只下降反之.....
int currentFloor=1;//当前楼层
List <Integer> list=new ArrayList<Integer>();//目标楼层
private void go() throws InterruptedException {
flag=0;
Scanner sc = new Scanner(System.in);
// TODO Auto-generated method stub
System.out.println("请输入楼层数");
list.clear();
while(true) {
int a=sc.nextInt();
if(a>0) {
list.add(a);
}
if(a<0) {
break;
}
}
int min = Collections.min(list);
int max = Collections.max(list);
if(currentFloor>=max) {
goDown(list);
}
else if(currentFloor<=min) {
goUp(list);
}
else {
goMiddle(list);
}
}
//先上升后下降
private void goMiddle(List list ) throws InterruptedException {
flag=1;
//需要上升的楼层
List <Integer> listUp=new ArrayList<Integer>();
//需要下降的楼层
List <Integer> listDown=new ArrayList<Integer>();
// TODO Auto-generated method stub
Collections.sort(list);//从小到大
// listDown.add((Integer) list.get(0));
// listUp.add((Integer) list.get(1));
// System.out.println(listUp.size());
// System.out.println(listDown.size());\
int i=0;
while(true) {
System.out.println(currentFloor);
if(currentFloor > (Integer)list.get(i)) {
listDown.add((Integer)list.get(i));//把上升楼层写入集合
}
if(currentFloor<(Integer)list.get(i)){
listUp.add((Integer)list.get(i));//把下降楼层写入集合
}
i++;
if(i>=list.size()) {break;}
}
//电梯上升过程
goUp(listUp);
//电梯下降过程
goDown(listDown);
go();
}
//上升
private void goUp(List list) throws InterruptedException {
System.out.println("电梯上升");
// TODO Auto-generated method stub
Collections.sort(list);//从小到大
int i=0;
while(true) {
//模拟延时
for(int j=0;j<(int)list.get(i)-currentFloor;j++) {
Thread.sleep(500);//线程休眠0.5s
System.out.println("......");
}
System.out.println("到达第"+list.get(i)+"层");
//重置当前楼层数
currentFloor =(int) list.get(i);
i++;
if(i>=list.size()) {break;}
}
System.out.println("当前在"+currentFloor+"层");
if(flag==0){
go();
}
}
//下降
private void goDown(List list) throws InterruptedException {
System.out.println("电梯下降");
// TODO Auto-generated method stub
Collections.sort(list);//从小到大
int i=list.size()-1;
while(true) {
//模拟延时
for (int j=0;j<currentFloor-(int)list.get(i);j++) {
Thread.sleep(500);//线程休眠0.5s
System.out.println("......");
}
System.out.println("到达第"+list.get(i)+"层");
//重置当前楼层数
currentFloor =(int) list.get(i);
i--;
if(i<0) {break;}
}
System.out.println("当前在"+currentFloor+"层");
if(flag==0){
go();
}
}
}