实施接受csv文件作为输入的银行家算法

时间:2019-10-18 01:33:34

标签: java csv bankers-algorithm

由于我希望输入改为csv文件,因此如何更改此代码。该算法已经正确,但是当我尝试转换输入选项时,我遇到了困难。进程和资源的数量将取决于csv文件的输入。可用的矩阵也将在csv文件中给出。

import java.util.Scanner;

public class Bankers {
    private int need[][], allocate[][], max[][], avail[][], np, nr;

    private void input() {
        Scanner sc = new Scanner(System.in);
        System.out.print("Enter no. of processes and resources : ");
        np = sc.nextInt();  //no. of process
        nr = sc.nextInt();  //no. of resources
        need = new int[np][nr];  //initializing arrays
        max = new int[np][nr];
        allocate = new int[np][nr];
        avail = new int[1][nr];

        System.out.println("Enter allocation matrix -->");
        for (int i = 0; i < np; i++) {
            for (int j = 0; j < nr; j++) {
                allocate[i][j] = sc.nextInt();  //allocation matrix
            }
        }
        System.out.println("Enter max matrix -->");
        for (int i = 0; i < np; i++) {
            for (int j = 0; j < nr; j++) {
                max[i][j] = sc.nextInt();  //max matrix
            }
        }
        System.out.println("Enter available matrix -->");
        for (int j = 0; j < nr; j++) {
            avail[0][j] = sc.nextInt();  //available matrix
        }
        sc.close();
    }

    private int[][] calc_need() {
        for (int i = 0; i < np; i++) {
            for (int j = 0; j < nr; j++) { //calculating need matrix
                need[i][j] = max[i][j] - allocate[i][j];
            }
        }

        return need;
    }

    private boolean check(int i) {
        //checking if all resources for ith process can be allocated
        for (int j = 0; j < nr; j++) {
            if (avail[0][j] < need[i][j]) {
                return false;
            }
        }

        return true;
    }

    public void isSafe() {
        input();
        calc_need();
        boolean done[] = new boolean[np];
        int j = 0;

        while (j < np) {  //until all process allocated
            boolean allocated = false;
            for (int i = 0; i < np; i++) {
                if (!done[i] && check(i)) {  //trying to allocate
                    for (int k = 0; k < nr; k++) {
                        avail[0][k] = avail[0][k] - need[i][k] + max[i][k];
                    }
                    System.out.println("Allocated process : " + i);
                    allocated = done[i] = true;
                    j++;
                }
            }
            if (!allocated) {
                break;  //if no allocation
            }
        }
        if (j == np) { //if all processes are allocated 
            System.out.println("\nSafely allocated");
        } else {
            System.out.println("All proceess cant be allocated safely");
        }
    }

    public static void main(String[] args) {
        new Bankers().isSafe();
    }
}

0 个答案:

没有答案