電梯調度算法直上直下有吐槽

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樓

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章