package game1;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Scanner;
import java.util.Set;
public class Elevator2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] floors=new int[10];
for(int i=0;i<10;i++) {
floors[i]=i+1;
}
Scanner scanner=new Scanner(System.in);
int exit=-100;
int curFloor=5;
int go=-100;
int up=1;
Set<Integer> buttonUp=new HashSet<Integer>();
Set<Integer> buttonDown=new HashSet<Integer>();
List<Integer> buttons=new ArrayList<Integer>();
while(exit!=100) {
while(true){
System.out.println("which floor or go");
go=scanner.nextInt();
if(go==100) {
break;
}
//buttons.add(go);
if(go>curFloor)
buttonUp.add(go);
else
buttonDown.add(go);
}
if(up==1) {
buttons.addAll(buttonUp);
buttons.sort(null);
buttonUp.clear();
}else {
buttons.addAll(buttonDown);
Collections.reverse(buttons);
buttonDown.clear();
}
//按键入顺序错
// for(int i=curFloor;i<buttons.get(0);i++) {
// System.out.println("go:"+(i+1));
// }
//按键入顺序
if(curFloor<buttons.get(0))
for(int i=curFloor;i<buttons.get(0);i++) {
System.out.println("go:"+(i+1));
curFloor=i;
}
else {
for(int i=curFloor-1;i>=buttons.get(0);i--) {
System.out.println("go:"+i);
curFloor=i;
}
}
if(buttons.get(0)==10)
up=0;
else if(buttons.get(0)==0)
up=1;
//curFloor=buttons.get(0);
System.out.println("stop");
buttons.remove(0);
for(int i=0;i<buttons.size();i++) {
System.out.println("left:"+buttons.get(i));
}
}
}
}
说明:此版连接上版按键入顺序https://blog.csdn.net/FRESHET/article/details/106144887
输入极端值测试:2,10,3,9,代表4个人分别先后按键,当前电梯停在5楼:最终效果是先上9楼,再上10楼,再下3楼,再下2楼
此版在上版的基础上修改,仅为抛砖引玉,吐槽的内容即为看起来一个简单的修改蕴含着大量的算法和理念,这版仅保证一次运行成功,而且焊接代码严重,自己都有点写不下去了,至少结构、模式什么的得调整,而且大量变化未考虑到,我听说有博士或机构在专门研究电梯算法。而且一个优秀的算法可能再另一个小区就不灵了,可不是看起来那么简单。那些博士或已经进大机构的可能便是上篇我说的那些幸运儿。我感觉更多的战友还坚守在战壕里,还有可能已经不在了。