用java编写的银行家算法
- 格式:doc
- 大小:58.00 KB
- 文档页数:4
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;
}
}