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樓
此版在上版的基礎上修改,僅爲拋磚引玉,吐槽的內容即爲看起來一個簡單的修改蘊含着大量的算法和理念,這版僅保證一次運行成功,而且焊接代碼嚴重,自己都有點寫不下去了,至少結構、模式什麼的得調整,而且大量變化未考慮到,我聽說有博士或機構在專門研究電梯算法。而且一個優秀的算法可能再另一個小區就不靈了,可不是看起來那麼簡單。那些博士或已經進大機構的可能便是上篇我說的那些幸運兒。我感覺更多的戰友還堅守在戰壕裏,還有可能已經不在了。