FCFS算法java实现
时间类:
package ProcessPriorityScheduling;
public class time {private int hour;private int min;public int getHour() {return hour;}public void setHour(int hour) {this.hour = hour;}public int getMin() {return min;}public void setMin(int min) {this.min = min;}public void initTime(String t){this.hour = Integer.parseInt(t.split(":")[0]);this.min = Integer.parseInt(t.split(":")[1]);}public static int sub(String s,String f){return Integer.parseInt(f.split(":")[0])*60+Integer.parseInt(f.split(":")[1])-Integer.parseInt(s.split(":")[0])*60-Integer.parseInt(s.split(":")[1]);}@Overridepublic String toString() {if(min < 10){return hour+":0"+min;}else{return hour+":"+min;}}
}
进程类:
package ProcessPriorityScheduling;
public class Process implements Comparable{private int id; //编号private String name; // 进程名private time arrive; //到达就绪队列的时间private int zx; //执行时间private time start; //进入CPU运行开始的时间private time finish; //完成时间private int zz; //周转时间 = 完成时间 - 到达就绪时间private float zzxs; // 带权周转系数 = 周转时间/执行时间public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public time getArrive() {return arrive;}public void setArrive(time arrive) {this.arrive = arrive;}public int getZx() {return zx;}public void setZx(int zx) {this.zx = zx;}public time getStart() {return start;}public void setStart(time start) {this.start = start;}public time getFinish() {return finish;}public void setFinish(time finish) {this.finish = finish;}public int getZz() {return zz;}public void setZz(int zz) {this.zz = zz;}public float getZzxs() {return zzxs;}public void setZzxs(float zzxs) {this.zzxs = zzxs;}@Overridepublic int compareTo(Object o) {if( o instanceof Process){Process t = (Process) o;return (this.arrive.getHour()*60+this.arrive.getMin())-(t.arrive.getHour()*60+t.arrive.getMin());}return 0;}@Overridepublic String toString() {return "Process{" +"id=" + id +", name='" + name + '\'' +", arrive=" + arrive +", zx=" + zx +", start=" + start +", finish=" + finish +", zz=" + zz +", zzxs=" + zzxs +'}';}}
主函数:
package ProcessPriorityScheduling;import java.util.ArrayList;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner s = new Scanner(System.in);System.out.println("是否开始进程调度实验,开始实验:1,结束实验:0");int flag = s.nextInt();while (flag == 1){ArrayList<Process> list = new ArrayList<>();int zz;int hour;int min;System.out.println("=====================================================================================");System.out.print("请输入进程数:");int num = s.nextInt();System.out.println("请输入"+num+"个进程的:");System.out.println("ID号 名字 到达时间 执行时间(分钟):");//输入用空格分隔for (int i = 0; i < num; i++) {Process p = new Process();p.setId(s.nextInt());p.setName(s.next());time t = new time();t.initTime(s.next());p.setArrive(t);p.setZx(s.nextInt());list.add(p);}list.sort(Process::compareTo);System.out.println(" ");System.out.println("模拟进程FCFS调度过程输出结果:");System.out.println("ID号 名字 到达时间 执行时间(分钟) 开始时间 完成时间 周转时间(分钟) 带权周转时间(系数):");int loc;float sumZz = 0;float sumZzxs = 0;time finish = new time();finish.setHour(0);finish.setMin(0);while(list.size() != 0){// 选择先到达的进入队列loc = 0;for (int i = 1; i < list.size(); i++) {if(time.sub(list.get(loc).getArrive().toString(),list.get(i).getArrive().toString()) < 0){loc = i;}}// 计算时间有关的信息if(time.sub(list.get(loc).getArrive().toString(),finish.toString()) >= 0){hour = finish.getHour();min = finish.getMin();time t1 = new time();t1.setHour(hour);t1.setMin(min);list.get(loc).setStart(t1);}else{hour = list.get(loc).getArrive().getHour();min = list.get(loc).getArrive().getMin();time t1 = new time();t1.setHour(hour);t1.setMin(min);list.get(loc).setStart(t1);}hour += (min+list.get(loc).getZx())/60;min = (min+list.get(loc).getZx())%60;time t2 = new time();t2.setHour(hour);t2.setMin(min);finish = t2;list.get(loc).setFinish(t2);zz = time.sub(list.get(loc).getArrive().getHour()+":"+list.get(loc).getArrive().getMin(),list.get(loc).getFinish().getHour()+":"+list.get(loc).getFinish().getMin());list.get(loc).setZz(zz);list.get(loc).setZzxs((float)list.get(loc).getZz()/list.get(loc).getZx());sumZz += list.get(loc).getZz();sumZzxs += list.get(loc).getZzxs();System.out.println(String.format("%-6d",list.get(loc).getId())+String.format("%-6s",list.get(loc).getName())+String.format("%-10s",list.get(loc).getArrive().toString())+String.format("%-13s",list.get(loc).getZx()+"(分钟)")+String.format("%-9s",list.get(loc).getStart().toString())+String.format("%-10s",list.get(loc).getFinish().toString())+String.format("%-16s",list.get(loc).getZz()+"(分钟)")+String.format("%-4.2f",list.get(loc).getZzxs()));list.remove(loc);}System.out.println(String.format("%-48s","系统平均周转时间为:")+String.format(" %-4.2f",sumZz/num));System.out.println(String.format("%-64s","系统带权平均周转时间为: ")+String.format("%-4.2f",sumZzxs/num));System.out.println("=====================================================================================");System.out.println("是否继续进程调度实验,开始实验:1,结束实验:0");flag = s.nextInt();}System.out.println("进程调度实验结束!!!");s.close();}
}
//测试数据
/*
5001 p1 9:40 20
5004 p4 10:10 10
5005 p5 10:05 30
5012 p2 12:55 15
5003 p3 9:45 25
* */
/*
5001 p1 9:40 20
5004 p4 12:10 10
5005 p5 10:05 30
5002 p2 9:55 15
5003 p3 9:45 25
*/
运行结果如下:
FCFS算法java实现相关推荐
- Java操作系统进程调度算法——先来先服务(FCFS)算法
Java操作系统进程调度算法--先来先服务(FCFS)算法 Java操作系统进程调度算法--先来先服务(FCFS)算法 文章目录 Java操作系统进程调度算法--先来先服务(FCFS)算法 前言 一. ...
- java进程调度怎么画图,[Java教程]进程调度的两种算法JAVA实现
[Java教程]进程调度的两种算法JAVA实现 0 2015-10-21 12:00:08 (SJF分为preemptive shortest job first(抢占式)和non-preemptiv ...
- 处理机调度算法模拟实验——FCFS算法,SJF调度算法
处理机调度算法模拟实验 一.实验目的 本实验模拟在单处理机情况下的处理机调度算法,用某种编程语言实现先来先服务和最短作业优先调度算法的模拟. 二.实验原理 1.先来先服务调度算法原理: 先来先服务调度 ...
- 推特雪花算法 java实现
2019独角兽企业重金招聘Python工程师标准>>> package twiter.snowflake;/*** twitter的snowflake算法 -- java实现*/ p ...
- java dh算法_dh密钥交换算法java
dh密钥交换算法java 迪菲-赫尔曼密钥交换(Diffie–Hellman key exchange,简称"D–H") 是一种安全协议. 它可以让双方在完全没有对方任何预先信息的 ...
- 数据结构和算法(Java)-张晨光-专题视频课程
数据结构和算法(Java)-579人已学习 课程介绍 如果说各种编程语言是程序员的招式,那么数据结构和算法就相当于程序员的内功. 想写出精炼.优秀的代码,不通过不断的锤炼,是很难做到的 ...
- floyed java_Floyd算法java实现demo
Floyd算法java实现,如下: package a; /** * ┏┓ ┏┓+ + * ┏┛┻━━━┛┻┓ + + * ┃ ┃ * ┃ ━ ┃ ++ + + + * ████━████ ┃+ * ...
- 快速排序算法 java 实现
快速排序算法 java 实现 快速排序算法Java实现 白话经典算法系列之六 快速排序 快速搞定 各种排序算法的分析及java实现 算法概念 快速排序是C.R.A.Hoare于1962年提出的一种划分 ...
- java 哈希一致算法_一致哈希算法Java实现
一致哈希算法(Consistent Hashing Algorithms)是一个分布式系统中常用的算法.传统的Hash算法当槽位(Slot)增减时,面临所有数据重新部署的问题,而一致哈希算法确可以保证 ...
最新文章
- 《LeetCode力扣练习》第21题 合并两个有序链表 Java
- Linux中常见命令和单词的缩写全称
- rnn参数共享的原因之一
- Linux从零开始(二、基础命令(续三)修改密码)
- CodeForces - 1285E Delete a Segmen(线段树+区间合并+离散化)
- Spring官方推荐的@Transactional还能导致生产事故?
- mysql sql语句 datediff_SQL语句中DateDiff函数说明
- Unity拓展编辑器 一键导出图集工具
- CUDA基础教程(2):费米架构
- C++ 版本 30:字符环
- 美容院店务管理系统哪家好?
- 《2021企业数智化转型升级创新服务企业》榜重磅发布
- 库存现金、现金管理制度、现金的账务处理、银行存款、银行存款的账务处理、银行存款的核对
- 近期技术讨论贴(持续更新:12-10)
- Docker之alpine自定义阿里云镜像
- 华工计算机网络辅修,【JZT干货】双手献上华工辅修攻略
- Java名片管理系统
- 中国武术职业联赛(WMA)筹备活动报道--山东烟台
- Oracle数据库多表连接查询操作以及查询操作的补充
- 如何使用智能默认值来减少认知负担