java - 如何创建可通过所有方法访问的公共(public)数组,但由用户输入确定其大小?

标签 java arrays methods parameters public

我有多个数组,其大小需要由用户输入确定。这些数组应该可以在 main 方法和 stepTwo() 方法中访问。然而,我被困住了。用户输入直到 main 方法才出现,但是如果我在 main 方法中声明数组,那么我无法访问 stepTwo() 方法中的数组。我不想将数组作为参数传递给 stepTwo(),因为我之前尝试过,但出现了多个错误。有什么建议么?完整代码请参见下面:

    public class AssignmentIII
    {       
    public static int numProcesses; // Represents the number of processes
    public static int numResources; // Represents the number of different types of resources

    public static int[] available = new int[numResources]; // Create an emptry matrix for available processes
    public static int[][] allocation = new int[numProcesses][numResources]; // Create an empty allocation matrix nxm
    public static int[][] request = new int[numProcesses][numResources]; // Create an empty request matrix nxm
    public static int[] work = new int[numResources]; // Create an empty work matrix
    public static Boolean[] finish = new Boolean[numProcesses]; // Create an empty finish matrix

    public static void main(String[] args) throws FileNotFoundException
    {
        try
        {
            Scanner scan = new Scanner(System.in);
            Scanner fileScan = new Scanner(new File("input1.txt")); // Create file scanner

            System.out.println("Please enter the total number of processes: ");
            numProcesses = scan.nextInt();
            System.out.println("Please enter the number of different types of resources: ");
            numResources = scan.nextInt();

            // Initialize the available matrix
            for(int i = 0; i < numResources; i++)
            available[i]=fileScan.nextInt();

            // Initialize the allocation matrix
            for(int j = 0; j < numProcesses; j++)
                for(int k = 0; k < numResources; k++)
                    allocation[j][k]=fileScan.nextInt();

            // Initialize the request matrix
            for(int m = 0; m < numProcesses; m++)
                for(int n = 0; n < numResources; n++)
                    request[m][n]=fileScan.nextInt();

            // Print allocation matrix
            System.out.println();
            System.out.println("Allocated");
            for(int i = 0; i < numResources; i++)
            {
                System.out.print("\tR" + i);
            }
            System.out.println();
            for(int j = 0; j < numProcesses; j++)
            {
                System.out.print("P" + j);
                for(int k = 0; k < numResources; k++)
                {
                    System.out.print("\t" + allocation[j][k]);
                }
                System.out.println();
            }

            // Print available matrix
            System.out.println();
            System.out.println("Available");
            for(int i = 0; i < numResources; i++)
            {
                System.out.print("R" + i + "\t");
            }
            System.out.println();
            for(int i = 0; i < numResources; i++)
                System.out.print(available[i] + "\t");
            System.out.println();


            // Print request matrix
            System.out.println();
            System.out.println("Requested");
            for(int i = 0; i < numResources; i++)
                {
                    System.out.print("\tR" + i);
                }
            System.out.println();

            for(int m = 0; m < numProcesses; m++)
            {
                System.out.print("P" + m);
                for(int n = 0; n < numResources; n++)
                {
                    System.out.print("\t" + request[m][n]);
                }
                System.out.println();
            }
            System.out.println();

            // Begin deadlock detection algorithm               
            for(int i = 0; i < numResources; i++) // Intialize Work := Available
                work[i]=available[i];

            for(int j = 0; j < numProcesses; j++) // Check for Allocation != 0 and initialize Finish accordingly
            {
                int sumAllocation = 0;
                for(int i = 0; i < numResources; i++)
                {
                    sumAllocation += allocation[j][i];
                }

                if (sumAllocation != 0)
                    finish[j] = false;
                else finish[j] = true;
            }

            stepTwo();

            }
            catch(FileNotFoundException ex)
            {
            System.out.println("An error has occured. The file cannot be found.");
            }
    }

    public static void stepTwo()
    {
        // Step 2
        // Find an index i where Finish[i] = false & Request[i] <= Work         
        for(int i = 0; i < numProcesses; i++)
        {
            int sumRequests = 0;
            int sumWork = 0;

            // Sum the Request and Work vectors
            for(int k = 0; k < numResources; k++)
            {   
                sumRequests += request[i][k];
                sumWork += work[k];
            }

            if (finish[i] == false && sumRequests <= sumWork)
            {
                finish[i] = true;
                for(int m = 0; m < numResources; m++)
                {
                    work[m] = work[m] + allocation[i][m];
                }

                stepTwo();
            }
            else if (finish[i] == false)
            // Step 4: Print which processes are in a deadlock state
            // Print using P0, P1, ... , Pn format
                System.out.println("P" + i + " is in a deadlock state.");                           
        }
    }
 }

最佳答案

像您一样声明数组 - “above main”,但在读取适当的大小后对其进行初始化。

声明:

public static int[] available;

初始化:

available = new int[numResources];

关于java - 如何创建可通过所有方法访问的公共(public)数组,但由用户输入确定其大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29086903/

相关文章:

java - 当子类对象传递给带有父类(super class)参数的方法时会发生什么?

python - 我可以将一个函数和不同数量的参数传递给另一个函数吗?

java - 用于 HSQLDB 的 Hibernate @generatedvalue

java - 随着模型内部状态的变化更新 java GUI

java - 结合JBehave和SpringJUnit4ClassRunner实现事务回滚

JavaScript for 数组中字符串的循环

Java : Simple array with custom range of values (int)?

php - 搜索数组中的值不起作用

actionscript-3 - 冲突范围 : Global Functions and Class Methods of the Same Name

java - Galaxy S II 上的 SMS_RECEIVED 未触发 BroadcastReceiver