package 银行家算法;
import java.util.Scanner;
public class Bank {
static int[] available; // available表示还有多少可用资源
static int[][] max;// Max表示各进程对资源的最大需求数
static int[][] allocation;// 表示已分配的资源矩阵
static int[][] need;// need矩阵表示各进程最多还需要多少资源
static int[] request; // request表示进程此次申请的各种资源数
static int[] sequence_safe; // 安全序列数组
static int process_nums; // 定义进程的数量
static int resource_nums; // 定义资源的种类数量
static boolean flag; // 定义标志变量
static String[] name;
static void bankInitialize() {
// 输入进程数
Scanner in = new Scanner(System.in);
System.out.println("请输入进程的数量:");
process_nums = in.nextInt();
// 输入资源种类数量
System.out.println("请输入资源种类数量:");
resource_nums = in.nextInt();
// 初始化数组
max = new int[process_nums][resource_nums];
available = new int[resource_nums];
allocation = new int[process_nums][resource_nums];
request = new int[resource_nums]; // request的长度等于资源种类,某个进程分别申请的各个资源个数
sequence_safe = new int[process_nums];
need = new int[process_nums][resource_nums];
name = new String[resource_nums];
for (int i = 0; i < resource_nums; i++) {
in.nextLine();// 清空幻空去否则可能导致无法输入报出异常
System.out.print("资源" + i + "名称为: ");
name[i] = in.nextLine();
System.out.println("资源" + name[i] + "初始化个数为: ");
available[i] = in.nextInt();
}
// 输入最大需求矩阵
System.out.println("请输入最大需求矩阵:");
for (int i = 0; i < process_nums; i++) {
for (int j = 0; j < resource_nums; j++) {
max[i][j] = in.nextInt();
}
}
// 输入分配资源矩阵
do {
flag = false;
System.out.println("请输入分配矩阵:");
for (int i = 0; i < process_nums; i++) {
for (int j = 0; j < resource_nums; j++) {
allocation[i][j] = in.nextInt();
if (allocation[i][j] > max[i][j]) {
flag = true;
}
}
}
if (flag) {
System.out.println("分配的资源大于最大量,请重新输入!");
}
} while (flag);
// 计算需求矩阵
for (int i = 0; i < process_nums; i++) {
for (int j = 0; j < resource_nums; j++) {
need[i][j] = max[i][j] - allocation[i][j];
}
}
}
// 显示资源
static void showdate() {
//展示数据输出每个进程的相关数
System.out.println(" Max All Need ");
System.out.println("进程号 A B C A B C A B C");
for(int i = 0;i