时间类:

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实现相关推荐

  1. Java操作系统进程调度算法——先来先服务(FCFS)算法

    Java操作系统进程调度算法--先来先服务(FCFS)算法 Java操作系统进程调度算法--先来先服务(FCFS)算法 文章目录 Java操作系统进程调度算法--先来先服务(FCFS)算法 前言 一. ...

  2. java进程调度怎么画图,[Java教程]进程调度的两种算法JAVA实现

    [Java教程]进程调度的两种算法JAVA实现 0 2015-10-21 12:00:08 (SJF分为preemptive shortest job first(抢占式)和non-preemptiv ...

  3. 处理机调度算法模拟实验——FCFS算法,SJF调度算法

    处理机调度算法模拟实验 一.实验目的 本实验模拟在单处理机情况下的处理机调度算法,用某种编程语言实现先来先服务和最短作业优先调度算法的模拟. 二.实验原理 1.先来先服务调度算法原理: 先来先服务调度 ...

  4. 推特雪花算法 java实现

    2019独角兽企业重金招聘Python工程师标准>>> package twiter.snowflake;/*** twitter的snowflake算法 -- java实现*/ p ...

  5. java dh算法_dh密钥交换算法java

    dh密钥交换算法java 迪菲-赫尔曼密钥交换(Diffie–Hellman key exchange,简称"D–H") 是一种安全协议. 它可以让双方在完全没有对方任何预先信息的 ...

  6. 数据结构和算法(Java)-张晨光-专题视频课程

    数据结构和算法(Java)-579人已学习 课程介绍         如果说各种编程语言是程序员的招式,那么数据结构和算法就相当于程序员的内功. 想写出精炼.优秀的代码,不通过不断的锤炼,是很难做到的 ...

  7. floyed java_Floyd算法java实现demo

    Floyd算法java实现,如下: package a; /** * ┏┓ ┏┓+ + * ┏┛┻━━━┛┻┓ + + * ┃ ┃ * ┃ ━ ┃ ++ + + + * ████━████ ┃+ * ...

  8. 快速排序算法 java 实现

    快速排序算法 java 实现 快速排序算法Java实现 白话经典算法系列之六 快速排序 快速搞定 各种排序算法的分析及java实现 算法概念 快速排序是C.R.A.Hoare于1962年提出的一种划分 ...

  9. java 哈希一致算法_一致哈希算法Java实现

    一致哈希算法(Consistent Hashing Algorithms)是一个分布式系统中常用的算法.传统的Hash算法当槽位(Slot)增减时,面临所有数据重新部署的问题,而一致哈希算法确可以保证 ...

最新文章

  1. 《LeetCode力扣练习》第21题 合并两个有序链表 Java
  2. Linux中常见命令和单词的缩写全称
  3. rnn参数共享的原因之一
  4. Linux从零开始(二、基础命令(续三)修改密码)
  5. CodeForces - 1285E Delete a Segmen(线段树+区间合并+离散化)
  6. Spring官方推荐的@Transactional还能导致生产事故?
  7. mysql sql语句 datediff_SQL语句中DateDiff函数说明
  8. Unity拓展编辑器 一键导出图集工具
  9. CUDA基础教程(2):费米架构
  10. C++ 版本 30:字符环
  11. 美容院店务管理系统哪家好?
  12. 《2021企业数智化转型升级创新服务企业》榜重磅发布
  13. 库存现金、现金管理制度、现金的账务处理、银行存款、银行存款的账务处理、银行存款的核对
  14. 近期技术讨论贴(持续更新:12-10)
  15. Docker之alpine自定义阿里云镜像
  16. 华工计算机网络辅修,【JZT干货】双手献上华工辅修攻略
  17. Java名片管理系统
  18. 中国武术职业联赛(WMA)筹备活动报道--山东烟台
  19. Oracle数据库多表连接查询操作以及查询操作的补充
  20. 如何使用智能默认值来减少认知负担

热门文章

  1. vue+node+mysql实现登录注册功能
  2. was not registered for sy
  3. 信吗?20年后人类将长生不老!
  4. 快速上手docker-java,示例全网最全,带你踩坑,带你飞
  5. 房产管理系统中CAD图形管理分析
  6. 使用逻辑回归对泰坦尼克号数据 生存死亡情况预测
  7. 科技是创新之本 企业生命之源 2019中关村国际前沿科技创新大赛圆满闭幕
  8. dz论坛附件在服务器中的位置,dz论坛如何启用远程附件功能(详细图解)
  9. 多播数据报的寻址方式(怎么找到目的主机)
  10. 【车载开发系列】CAN总线通信---总线报文格式