将图一二c语言代码转换为java代码,并可以输出就如图三所示一样
node.java
public class node {
public int num; //进程号
public int worktime; //作业量
public long subtime; //提交时间
public long starttime; //开始运行时间
public long executetime;//执行时间
public long waittime;//等待时间
}
Task.java
import java.util.Calendar;
import java.util.Scanner;
public class Task {
private node PCB[];
private int N ;
private Scanner sc;
public Task(){
PCB = new node[4];
for(int i=0;i<4;i++)
PCB[i] = new node();
N = 4;
sc = new Scanner(System.in);
}
//构造一个输出函数
public void print(){
int k;
try{
System.out.print("\n进程的相关信息如下\n");
System.out.print("\n进程号 作业量 提交时间 开始运行时间 执行时间 等待时间\n");
for(k=0;k<N;k++){
System.out.println(PCB[k].num+ " "+PCB[k].worktime+" "+PCB[k].subtime+" "+PCB[k].starttime+" "+PCB[k].executetime+" "+PCB[k].waittime);
}
System.out.println("执行顺序:");
System.out.print(PCB[0].num);
for(k=1;k<N;k++){
System.out.print("-->"+PCB[k].num);
}
System.out.println();
}catch(Exception e){
System.out.println("NULL PTR IN PRINT");
}
}
// 根据进程到达时间进行排序,从小到大
public void sort(){
int i,j;
try{
for(i=1;i<N;i++){
node t = PCB[i];
for(j=i-1;j>=0 && t.subtime < PCB[j].subtime;j--)
PCB[j+1] = PCB[j];
PCB[j+1] = t;
}
}catch(Exception e){
System.out.println("NULL PTR IN SORT");
}
}
//定义先来先服务函数
public void FCFS(){
sort();
long endtime=0,start,end,executetime;
int t[] = new int[100];
try{
for(int m=0;m<N;m++){
t[m]=PCB[m].worktime*1000;
}
// PCB[0].starttime =PCB[0].subtime;
for(int i=0;i<4;i++){
PCB[i].starttime =(endtime>PCB[i].subtime) ? endtime:PCB[i].subtime;
start = Calendar.getInstance().getTimeInMillis();
while(t[i]>0)
t[i]--;
end = Calendar.getInstance().getTimeInMillis();
executetime = end-start;
endtime =PCB[i].starttime + executetime;
PCB[i].waittime = PCB[i].starttime - PCB[i].subtime;
}
}catch(Exception e){
System.out.println("NULL PTR IN FCFS");
}
print();
}
public void deal(){
int s[]=new int[100];
for(int m=0;m<N;m++){
s[m] = 1+(int)(10*Math.random()); //生成1到10的随机数
}
try{
for(int i=0;i<4;i++){
//控制作业量为100-1000
//PCB[i].worktime = 100 +(int)(Math.random()*901);
//控制提交时间数值小一点
PCB[i].subtime = Calendar.getInstance().getTimeInMillis() + s[i];
PCB[i].num = i;
}
}catch(Exception e){
System.out.println("NULL PTR IN DEAL");
}
FCFS();
}
public void setTask(){
try{
for(int i=0;i<4;i++){
System.out.print("task["+(i+1)+"]: ");
PCB[i].worktime = sc.nextInt();
}
}catch(Exception e){
System.out.println("scanner null");
}
}
}
Test.java(main入口程序)
public class Test {
public static void main(String[] args){
Task tk = new Task();
tk.setTask();
tk.deal();
}
}
Markdown将文本转换为 HTML。