⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 yhj.java

📁 实现了银行家的算法
💻 JAVA
字号:
import java.util.*;
import java.io.*;
class list
{
	public int  maxa,maxb,maxc;
	public int  remainda,remaindb,remaindc;
}
class node
{
	String name=null;
	int ALa,ALb,ALc;
	int needa,needb,needc;
}

public class YHJ
{
	public static list banker=new list();
	public static node processes[]=new node[10];
	int quantity,number=0; //jinchenggeshu
	int A,B,C;
	public static  int MAX_A=10,MAX_B=6,MAX_C=7;
	public static void main(String []args)
	{
		for(int j=0;j<10;j++)
			processes[j]=new node();
		int i;
		YHJ yhl=new YHJ();
		banker.maxa=MAX_A;
		banker.maxb=MAX_B;
		banker.maxc=MAX_C;
		banker.remainda=MAX_A;
		banker.remaindb=MAX_B;
		banker.remaindc=MAX_C;
		for(i=0;i<10;i++)
		{ 
			processes[i].name=""; 
	        processes[i].ALa=0; 
	        processes[i].ALb=0; 
	        processes[i].ALc=0; 
	        processes[i].needa=0;
	        processes[i].needb=0;
	        processes[i].needc=0;
		}
		System.out.println("*************************************");
		System.out.println("*            1--添加新作业          *");
		System.out.println("*            2--为作业分配资源      *");
		System.out.println("*            3--撤销作业            *");
		System.out.println("*            4--查看资源分配情况    *");
		System.out.println("*            0--退出                *");
		System.out.println("*************************************");
		System.out.print("Please choose:  ");
		Scanner in = new Scanner(System.in);
		int choose = in.nextInt();
		while(choose!=0)
		{
			switch(choose)
			{
				case 1:yhl.add();break;
				case 2:yhl.please();break;
				case 3:yhl.finished();break;
				case 4:yhl.view();break;
			}
		System.out.println("*************************************");
		System.out.println("*            1--添加新作业          *");
		System.out.println("*            2--为作业分配资源      *");
		System.out.println("*            3--撤销作业            *");
		System.out.println("*            4--查看资源分配情况    *");
		System.out.println("*            0--退出                *");
		System.out.println("*************************************");
		System.out.print("Please choose:  ");
		choose = in.nextInt();
		}
	}
public boolean safe()
{
	int count=0;
	int Work[]=new int[3];
	int Finish[]=new int[5];
	int i,j,k=0;
    Work[0]=banker.remainda;
	Work[1]=banker.remaindb;
	Work[2]=banker.remaindc;
	for(i=0;i<number;i++)
	{
		Finish[i]=0;
	}
	i=0;
	while(i<number)
	{
		if(Finish[i]==0 && Work[0]>=processes[i].needa && Work[1]>=processes[i].needb && Work[2]>=processes[i].needc)
		{
			Work[0]+=processes[i].ALa;
			Work[1]+=processes[i].ALb;
			Work[2]+=processes[i].ALc;
			Finish[i]=1;
			count++;
			i=0;
			continue;
		}
		i++;
	}
	if(count<number)
	{
		return false;
	}
	else
	{
		return true;
	}
}
public void add()
{
	 String name; 
     boolean flag=false,t=false; 
     int need_a,need_b,need_c; 
     int i; 
     System.out.println("新加进程");
     System.out.println("请输入新加进程名:");
     Scanner in=new Scanner(System.in);
     name=in.next(); 
	 number++;
	 for(i=0;i<quantity;i++)
	 {
	 	if(processes[i].name.equals(name))
	 	{ 
            flag=true; 
            break; 
		} 
	 } 

	 if(flag)
	 { 
     	 System.out.println("进程已存在");
	 } 
	 else
	 {
		 System.out.println("本进程所需A类资源:"); 
	     need_a=in.nextInt(); 
	     System.out.println("本进程所需B类资源:"); 
	     need_b=in.nextInt(); ; 
	     System.out.println("本进程所需C类资源:"); 
	     need_c=in.nextInt(); 
	     t=true; 
	     //System.out.println(need_a+" "+banker.remainda); 
		 if(need_a>banker.remainda)
		 {
		 	  System.out.println("错误,所需A类资源大于银行家所剩A类资源"); 
	          t=false; 
	 	 } 
		 if(need_b>banker.remaindb)
		 { 
	          System.out.println("错误,所需B类资源大于银行家所剩B类资源"); 
	          t=false; 
		 } 
		 if(need_c>banker.remaindc)
		 { 
	          System.out.println("错误,所需C类资源大于银行家所剩C类资源"); 
	          t=false; 
		 } 
		 if(t)
		 {
		 	processes[quantity].name=name; 
            processes[quantity].needa=need_a; 
            processes[quantity].needb=need_b; 
            processes[quantity].needc=need_c; 

            quantity++; 
            System.out.println(name+"进程添加成功"); 
		} 
        else
        { 
           System.out.println("新加进程失败"); 
		} 
	} 
}
//为进程申请资源 
void please() 
{ 
    String name;
    int i,p,finishcnt=0,count=0; 
    boolean flag=false; 
    System.out.println();
    System.out.println("为进程申请资源"); 
    System.out.println("要申请资源的进程名:"); 
    Scanner in=new Scanner(System.in);
    name=in.next(); 

    p=-1; 
	for(i=0;i<quantity;i++){ 
    if(processes[i].name.equals(name))
    {
    	p=i; 
  	    break; 
    }

	} 
	if(p!=-1)
	{
		System.out.println("该进程要申请A类资源数量:"); 
      	A=in.nextInt();
      	System.out.println("该进程要申请B类资源数量:"); 
      	B=in.nextInt();
      	System.out.println("该进程要申请C类资源数量:"); 
      	C=in.nextInt();

		if((A>banker.remainda)||(A>processes[p].needa))
		{ 
			System.out.println("错误,所申请A类资源大于银行家所剩A类资源或该进程还需数量"); 
			flag=false; 
		} 
		if((B>banker.remaindb)||(B>processes[p].needb))
		{ 
			System.out.println("错误,所申请B类资源大于银行家所剩B类资源或该进程还需数量");
			flag=false;  
		} 
		if((C>banker.remaindc)||(C>processes[p].needc))
		{ 
			System.out.println("错误,所申请C类资源大于银行家所剩C类资源或该进程还需数量");
			flag=false; 
		} 
     	banker.remainda-=A; 
     	banker.remaindb-=B; 
     	banker.remaindc-=C; 

	    processes[p].ALa+=A; 
	    processes[p].ALb+=B; 
	    processes[p].ALc+=C; 
	
	    processes[i].needa-=A;
	    processes[i].needb-=B;
	    processes[i].needc-=C;
		flag=safe(); 
		if(flag)
		{ 
		      System.out.println("为进程申请资源成功"); 
		} 
		else
		{
		      banker.remainda+=A; 
		      banker.remaindb+=B; 
		      banker.remaindc+=C; 
		
		      processes[p].ALa-=A; 
		      processes[p].ALb-=B; 
		      processes[p].ALc-=C; 
		
		      processes[i].needa+=A;
		      processes[i].needb+=B;
		      processes[i].needc+=C;
		
		      System.out.println("为进程申请资源失败");
		} 
	} 
	else
	{
		System.out.println("该进程不存在");
	} 
} 

//撤消进程 
public void finished() 
{ 
      String name;
      int i,p; 
      System.out.println();
      System.out.println("撤销进程");
      System.out.println("要撤消进程名:");    
      Scanner in=new Scanner(System.in);
      name=in.next(); 

      p=-1; 
	  for(i=0;i<quantity;i++)
	  {
	  	if(processes[i].name.equals(name))
	  	{
	  		p=i; 
	   		break; 
		} 
	  } 
	  if(p!=-1)
	  { 
           banker.remainda+=processes[p].ALa; 
           banker.remaindb+=processes[p].ALb; 
           banker.remaindc+=processes[p].ALc; 
		   for(i=p;i<quantity-1;i++)
		   { 
           		processes[i].name=processes[i+1].name;
           		processes[i].ALa=processes[i+1].ALa;
           		processes[i].ALb=processes[i+1].ALb;
           		processes[i].ALc=processes[i+1].ALc;
           		processes[i].needa=processes[i+1].needa;
           		processes[i].needb=processes[i+1].needb;
           		processes[i].needc=processes[i+1].needc;
		   } 
			processes[quantity-1].name=""; 
	        processes[quantity-1].ALa=0; 
	        processes[quantity-1].ALb=0; 
	        processes[quantity-1].ALc=0; 
	        processes[quantity-1].needa=0; 
	        processes[quantity-1].needb=0; 
	        processes[quantity-1].needc=0; 

         	quantity--; 

			System.out.println("撤消进程成功");
	  } 
	  else
	  {
	  	System.out.println("撤消进程失败");
	  }
} 
//查看资源情况 
void view() 
{
	int i; 
  	System.out.println();
	System.out.println("查看资源情况");
	System.out.println("\t"+"总共资源"+"\t"+"剩余资源");
	System.out.println("A类:"+"\t"+banker.maxa+"\t\t"+banker.remainda);
	System.out.println("B类:"+"\t"+banker.maxb+"\t\t"+banker.remaindb); 
	System.out.println("C类:"+"\t"+banker.maxc+"\t\t"+banker.remaindc);
	System.out.println();
	System.out.println("\t"+"占用资源"+"\t"+"所需资源");
	if(quantity>0)
	{ 
		for(i=0;i<quantity;i++)
		{ 
			System.out.println("进程:"+processes[i].name); 
			System.out.println("A类:"+"\t"+processes[i].ALa+"\t\t"+processes[i].needa); 
			System.out.println("B类:"+"\t"+processes[i].ALb+"\t\t"+processes[i].needb); 
			System.out.println("C类:"+"\t"+processes[i].ALc+"\t\t"+processes[i].needc); 
			System.out.println();
		} 
	} 
	else
	{ 
		System.out.println("当前没有进程"); 
	} 
} 

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -