啊啊啊 草蛋啊 之前努力一天搞出來的時間演算法 被一句pk掉 給我磚頭

範銘祥發表於2015-04-14
  1 package yun3;
  2 
  3 import java.io.BufferedReader;
  4 import java.io.InputStreamReader;
  5 import java.util.Calendar;
  6 import java.util.Scanner;
  7 public class number3 {
  8 
  9     /**
 10      * * 作者:範銘祥
 11      * 功能:演示先來先到處理演算法
 12      * 日誌2:事實證明日誌1的方法可用,但在系統執行過程中因為一些邏輯性問題而出錯,我將畫一張新邏輯圖
 13      * 來解決這問題,現建立新程式解決,並縮略程式
 14      */
 15     public static void main(String[] args) throws Exception
 16     {
 17             System.out.println("是否要自定作業個數?Y/N");
 18             BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
 19             String choose=br.readLine();
 20             JCB[] project=new JCB[25];
 21             int aa=1; 
 22             if(choose.equals("Y"))
 23             {
 24                 Scanner in=new Scanner(System.in);
 25                 System.out.println("請輸入作業的個數");
 26                 aa=in.nextInt()+1;//這裡aa預留大了1,後面只需用<符號
 27             }
 28             if(choose.equals("N"))
 29             {
 30                   aa=6;
 31             }
 32             //錄入各專案的JBC資料
 33             System.out.println("以下是輸入作業資訊:\n");
 34             Scanner in=new Scanner(System.in);
 35             for(int i=1;i<aa;i++)
 36             {
 37                 
 38                 project[i]=new JCB();
 39                 project[i].vv=i;
 40                 System.out.println("請輸入第"+i+"個作業的名字  ");
 41                 project[i].name=br.readLine();
 42                 project[i].inmessage("作業等待");
 43                 System.out.println("輸入第"+i+"個作業所需的執行時間(秒)!");
 44                 int run=in.nextInt();
 45                 project[i].time_1(run);
 46                 System.out.println("輸入第"+i+"個作業開始執行的時間(秒)");
 47                 int get=in.nextInt();
 48                 project[i].time_2(get);    
 49             }
 50             //以下是用於排序
 51             open1 s1=new open1();
 52             s1.open1_2(aa, project);
 53 //            //Test0
 54 //            for(int v=1;v<aa;v++)
 55 //            {
 56 //                System.out.println("vv"+project[v].vv);
 57 //            }
 58             //以下是用於將正確的作業順序填入JCB
 59             JCB PP[]=new JCB[25];
 60             for(int b=1;b<aa;b++)
 61             {
 62                 PP[b]=new JCB();
 63                 for(int c=1;c<aa;c++ )//這裡用於搜尋在pro[]vv中的1234
 64                 {
 65                     if(project[c].vv==b)
 66                     {
 67                         PP[b]=project[c];
 68                     }
 69                 }
 70             }
 71             //test
 72             for(int u=1;u<aa;u++)
 73             {
 74             System.out.println("第"+u+"處理: 原第"+PP[u].vv+"個作業——名稱:"+PP[u].name+"到達時間:"+PP[u].gettime+"執行時間"+PP[u].runtime);
 75             }
 76             //錄完go時間模組
 77             Calendar c = Calendar.getInstance(); 
 78             int gominute = c.get(Calendar.MINUTE); 
 79             int gosecond = c.get(Calendar.SECOND);
 80             int all=gominute*60+gosecond;
 81             //裝逼提示使用者系統開始時間(秒)
 82             System.out.println("錄完作業入系統的時間0");
 83             //以下是開始執行各作業的執行情況
 84             boolean go=true;int ii=1;int kk2=0;
 85             boolean go2=true;
 86 /*最外層迴圈*/do
 87             {
 88             
 89 //            System.out.println("ii"+ii);
 90             Calendar b = Calendar.getInstance();
 91 /*0延遲更新時間*/int m = b.get(Calendar.MINUTE)*60; 
 92             int s = b.get(Calendar.SECOND)+m;//現時間總和
 93             //以下這部分專門用來顯示時間
 94             int kk=s-all;
 95             if(kk==kk2)
 96             {
 97                 System.out.println("系統時間:第"+kk+"秒");
 98             }
 99             kk2=kk+1;
100             int yy=PP[ii].runtime;//這裡不知為何要用int來傳入PP【ii】.runtime,測試後發現這個可行
101             if(s==PP[ii].gettime+all)//當時間到達任務開始的時間
102             {
103                 System.out.println("第"+ii+"個作業的到達時間"+PP[ii].gettime);
104                 System.out.println("作業"+ii+"正在執行");
105 /*在該作業中不斷迴圈時間 直至時間跳到now=s(記錄的是該作業開始執行的時間)+runtime*/
106                 go2=true;//使下個作業能再進去
107                 while(go2)
108                 {
109                 Calendar d = Calendar.getInstance();//可以對每個時間域單獨修改 
110                 int m3 = d.get(Calendar.MINUTE)*60; 
111                 int s3 = d.get(Calendar.SECOND)+m3;//數出的最新的時間
112 /*判斷*/            if(s+yy==s3)
113                 {
114                   System.out.println("任務作業"+ii+"名字"+PP[ii].name+"狀態:完成");
115                   PP[ii].zt="作業完成";
116                   int nowt2=s3-all;
117                   System.out.println("現在系統時間"+nowt2);
118                   go2=false;
119                   //然後再判斷現時間是否超過下一作業的開始時間 是則 替代之    
120                   if(ii+1<=aa-1)//限制ii+1的範圍 避免空
121                   {
122                   if(nowt2>=PP[ii+1].gettime)
123                   {
124                       PP[ii+1].gettime=nowt2;
125                   }
126                   }
127                   ii++;
128                 }
129 //跳出來了
130                 if(ii==aa)
131                 {
132                     go=false;
133                 }
134                 
135                 }
136                 
137             }
138             }while(go);
139             System.out.println("                                         你的要求全部完成                                                                                              ");
140     }
141 
142 }
143 class JCB{
144     public String name,zt;//作業名  執行狀態
145     public int vv;//用來排完順序後儲存原來的作業號
146     public int runtime;//執行所需要時間
147     public int gettime;//到達時間
148     //從這裡錄入
149     public void inmessage(String zt)
150     {
151         this.zt=zt;
152     }
153     public void time_1(int cd)
154     {
155         this.runtime=cd;
156     }
157     public void time_2(int gd)
158     {
159         this.gettime=gd;
160     }
161 }
162 class SYS_START
163 {
164     public int gomm; //記錄全部作業開始時的時間
165     public int goss; //記錄全部作業開始時的時間
166     public int allstart;//這個是將全部作業開始的時間化為秒數
167     public SYS_START()
168     {
169         this.allstart=gomm*60+goss;
170     }
171     public void gommtime(int mmtime)
172      {
173          this.gomm=mmtime;
174      }
175     public void gosstime(int sstime)
176     {
177         this.goss=sstime;
178     }
179     
180 }
181 class open1 
182 {   
183     public void open1_2(int aa,JCB project[])
184     {
185           //以下是開始排序來達到先來先到處理演算法:採用的是氣泡排序法
186         int temp=0;
187         for(int i=1;i<aa;i++)
188         {  
189                 for(int y=aa-1;y>i;y--)
190                 {
191                    if(project[y].gettime<project[y-1].gettime)
192                    {
193                        temp=project[y].vv;
194                        project[y].vv=project[y-1].vv;
195                        project[y-1].vv=temp;
196                    }
197                 }
198         }
199     }
200 }




啊啊啊啊啊啊啊!!!
被一句pk掉
Thread.sleep(1000);

 

相關文章