关于银行家算法的模拟实现

2019-04-13 21:45发布

import java.util.Scanner;
public class Bank {


int Available[];//可利用资源向量
int Max[][];//最大需求矩阵
int Allocation[][];//分配矩阵
int Need[][];//需求矩阵
int Request[];//请求向量
int Work[];//工作变量,记录可用资源
boolean Finish[];//工作变量,记录进程是否执行完
static int a;
static int b;
public static void main(String[] args) {
// TODO 自动生成的方法存根

         Scanner sc=new Scanner(System.in);
         System.out.println("请输入资源种类数");
         int j=sc.nextInt();
         System.out.println("请输入进程数");
         int i=sc.nextInt();
         System.out.println("请输入系统拥有的总资源数");
         int c=sc.nextInt();
         for(int b=0;b          {
         for(int a=0;a          {
         System.out.println("请输入第"+b+" 个进程第"+a+"类需要多少资源");
         int k=sc.nextInt();
         System.out.println("请输入第"+b+" 个进程第"+a+"类分配到多少资源");
         int d=sc.nextInt();
         System.out.println("请输入第"+b+" 个进程第"+a+"类还需要多少资源");
         int e=sc.nextInt();
         Bank ban=new Bank(k,b,a,i,j,c,d,e);
         ban.bank();
         }
         }
         sc.close();
}
public Bank(int k,int b,int a,int i,int j,int c,int d,int e)//赋值传参
{
      Available=new int[j];
      Max=new int[i][j];
      Allocation=new int[i][j];
      Need=new int[i][j];
      Request=new int[j];
      Available[a]=c;
     Request[a]=k;
      Allocation[b][a]=d;
      Need[b][a]=e;
      Work=new int[j];
Finish=new boolean[i];
Work[a]=Available[a];
Finish[b]=false;
     
}
@SuppressWarnings("unused")
void bank()//银行家算法实现
{

 if(Request[a]<=Need[b][a])//进程申请的资源有没有超过声明的最大量
 {
 if(Request[a]<=Available[a])//判断资源够不够
 {
 Available[a]= Available[a]- Request[a];
 Allocation[b][a]= Allocation[b][a]+ Request[b];
     Need[b][a]= Need[b][a]- Request[a];//试分配
     while(true)
     {
     if(Finish[b]=false&&Need[b][a]<=Work[a])//执行安全算法
     {
     Work[a]=Work[a]+Allocation[b][a];
     Finish[b]=true;
     System.out.println("第"+b+"个进程顺利执行完毕");
     continue;
     }
     else
     {
    if(Finish[b]=true)
     {
          System.out.println("系统处于安全状态");
     }
     else
     {
     System.out.println("系统处于不安全状态");
     }
     
     break;
     }
     }
 }
 else
 {
 System.out.println("系统资源不够,需等待");

 }
 }
 else
 {
 System.out.println("申请资源出错");
 }
 
}


}