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);
时间: 2024-10-10 14:58:11