用java编写的银行家算法

  • 格式:doc
  • 大小:58.00 KB
  • 文档页数:4

下载文档原格式

  / 17
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

package银行家算法;

import java.util.Scanner;

public class Banker

{

public static char[] Name = {'A', 'B', 'C'};

public static int[] Available = {3,3,2};

public int[][] Max = {{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}};

public int[][] Alloction ={{0,1,0},{2,0,0},{3,0,2},{2,1,1},{0,0,2}};

public int[][] Need = {{7,4,3},{1,2,2},{6,0,0},{0,1,1},{4,3,1}};

public int[] Request = new int[3];

public int[] Work = new int[3];

int num = 0;//进程编号

Scanner in = new Scanner(System.in);

public static void main(String[] args)

{

boolean Choose = true;

String C;

Scanner in = new Scanner(System.in);

Banker T = new Banker();

System.out.println("银行家算法");

T.printSystemVariable();

T.SecurityAlgorithm();

while (Choose == true)

{

T.setRequest();

System.out.println("是否还要进行请求:y/n?");

C = in.nextLine();

if (C.endsWith("n"))

{

Choose = false;

}

}

}

public void printSystemVariable()

{

System.out.println("此时资源分配量如下:");

System.out.println("进程 "+" Max "+" Alloction "+" Need "+" Available ");

for(int i=0;i<5;i++)

{

System.out.print("P"+i+" ");

for(int j=0;j<3;j++)

{

System.out.print(Max[i][j]+" ");

}

System.out.print(" ");

for(int j=0;j<3;j++)

{

System.out.print(Alloction[i][j]+" ");

}

System.out.print(" ");

for(int j=0;j<3;j++)

{

System.out.print(Need[i][j]+" ");

}

System.out.print(" ");

if(i==0)

{

for(int j=0;j<3;j++)

{

System.out.print(Available[j]+" ");

}

}

System.out.println();

}

}

public void setRequest() {//设置请求资源量Request

b oolean T=true;

S ystem.out.println("资源请求过程!");

S ystem.out.println("请输入请求资源的进程编号:");

do

{

T=true;

num= in.nextInt();//设置全局变量进程编号num

System.out.println("请输入请求各资源的数量:");

for (int j = 0; j < 3; j++)

{

System.out.print(Name[j]+"=");

Request[j] = in.nextInt();

}

//银行家算法

if (Request[0] <= Need[num][0] && Request[1] <= Need[num][1] && Request[2] <= Need[num][2]) //判断Request是否小于Need

{

if (Request[0] <= Available[0] && Request[1] <= Available[1] && Request[2] <= Available[2]) //判断Request是否小于Alloction

{

for (int i = 0; i < 3; i++)

{

Available[i]=Available[i]-Request[i];

Alloction[num][i]=Alloction[num][i]+Request[i];

Need[num][i]=Need[num][i]-Request[i];

}

}

else

{

System.out.println("当前没有足够的资源可分配,进程P"+ num+ "需等待。");

T=false;

System.out.println("请从新输入请求资源的进程编号:");

}

}

else

{

System.out.println("请从新输入请求资源的进程编号:");

T=false;

}

}