⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bank.java

📁 操作系统银行家算法模拟 模拟银行家算法
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
	{
		for(int i=0;i<proceNumber;i++)
		{
			Process[i]=i+1;
		}
	}
	//********************************//全排列算法
	public void addVector(int arr[],Vector vector[])
	{
		String string="";
		 do 
		 {   
            for (int i = 0; i < arr.length; i++) {   
                string=string+arr[i];   
            }   
            vector[finall].addElement(string);
            finall++;
            string="";
         } while (nextPermutation(arr));
	}
	  public boolean nextPermutation(int[] arr) {   
        int postLeft = -1;   
        for (int i = arr.length - 1; i > 0; i--) {   
            if (arr[i - 1] < arr[i]) {   
                postLeft = i - 1;   
                break;   
            }   
        }   
        if (postLeft < 0) {   
            return false;   
        }   
   
        int postRight = -1;   
        for (int i = arr.length - 1; i >= postLeft; i--) {   
            if (arr[i] > arr[postLeft]) {   
                postRight = i;   
                break;   
            }   
        }   
        swap(arr, postLeft, postRight);   
        reverse(arr, postLeft + 1, arr.length);   
        return true;   
    } 
	
	    public void swap(int[] arr, int ind1, int ind2) 
	{   
        int t = arr[ind1];   
        arr[ind1] = arr[ind2];   
        arr[ind2] = t;   
    }   
   
    public void reverse(int[] arr, int ind1, int ind2)
    {   
        for (int i = 0; i < (ind2 - ind1) / 2; i++) 
        {   
            swap(arr, ind1 + i, ind2 - 1 - (i));   
        }
    }
    //复原函数
	//********************************/
    public int sum(int k)
    {
    	int sum=1;
    	for(;k>0;k--)
    	{
    		sum=sum*k;
    	}
    	return sum;
    }
    public int inner3(int current,int a[][])
    {
      int amount=0;
    	for(int i=0;i<a[current].length;i++)
       {
    	   if(system[i]<a[current][i])
    	   {
                amount=1;
                break;
    	   }
       }
          return amount;
    }
    public void addSystem(int j,int a[][])
    {
    	for(int i=0;i<a[j].length;i++)
    	{
    		system[i]=system[i]+allocation[j][i];
    	}
    	System.out.println();
    }
    public void huiFui()
    {
    	for(int h=0;h<system.length;h++)
    	{
    		system[h]=systemF[h];
    	}
    }
    public int outer(String string)
    {
    	int amount=0;
    	for(int j=0;j<string.length();j++)
    	{
    		int current=Integer.parseInt(string.substring(j,j+1))-1;
    		if(inner3(current,need)==0)
    		{
    			addSystem(current,allocation);
    		}
    		if(inner3(current,need)==1)
    		{
    			amount=1;
    			break;
    	    }
       }
    	return amount;
    }
    public void secure(Vector vectorAll[])
    {

    	for(int k=0;k<vectorAll.length;k++)
    	{
    		string=(String)vectorAll[k].elementAt(0);
    		System.out.println("string="+string);
            int amount=outer(string);
            if(amount==1)
            {
            	System.out.println(string+"不是安全序列被移除!");
            	vectorAll[k].removeElementAt(0);
            	huiFui();
            }
            if(amount==0)
            {
            	System.out.println(string+"是安全序列!");
            	huiFui();
            }
    	}
    }
    public void test()
    {
    	repuestAlternate=Integer.parseInt(requestAlternate.getText());
    	int current=repuestAlternate-1;
    	for(int j=0;j<max[current].length;j++)
    	{
    		if(request[j]>max[current][j])
    		{
    			JOptionPane.showMessageDialog(firstFrame,"request大于max,不能分配!");
    			System.exit(0);
    		}
    	}
    	for(int j=0;j<system.length;j++)
    	{
    		if(request[j]>system[j])
    		{
    			JOptionPane.showMessageDialog(firstFrame,"request大于system,不能分配!");
    			System.exit(0);   			
    		}
    	}
    	for(int j=0;j<need[current].length;j++)
    	{
    		need[current][j]=need[current][j]-request[j];
    		allocation[current][j]=allocation[current][j]+request[j];
    		system[j]=system[j]-request[j];
    	}
    }
    public void getInformation()
    {
		getMaxAndAllocation();
		getRequestNumber(requestTextField.getText(),request);
		getRequestNumber(systemJTextField.getText(),system);
		getRequestNumber(systemJTextField.getText(),systemF);
		addNum();
		Process(Process);
		addVector(Process,vectorAll);
    }
    public void clear2()
    {
    	if(vectorAllF.size()>0)
    	{
    	vectorAllF.removeAllElements();
    	}
    }
    public void clear()
    {
    	for(int j=0;j<maxTextField.length;j++)
    	{
    		maxTextField[j].setText("");
    		AllocationTextField[j].setText("");
    	}
    	systemJTextField.setText("");
    	requestTextField.setText("");
    	requestAlternate.setText("");
    	proceNumberText.setText("");
    	sourceNumberText.setText("");
    	Remove();
    }
	public void actionPerformed(ActionEvent e)
	{
		if(e.getSource()==firstFrameSureButton)//主窗口的确定按钮
		{
			getInformation();
			secure(vectorAll);
			for(int j=0;j<vectorAll.length;j++)
			{
				if(vectorAll[j].size()!=0)
				{
					vectorAllF.addElement(vectorAll[j].elementAt(0));
				}
			}
		}
		if(e.getSource()==secondFrameSureButton)//父窗口个窗口的确定按钮
		{
			proceNumber=Integer.parseInt(proceNumberText.getText());
			vectorAll=new Vector[sum(proceNumber)];
			for(int j=0;j<vectorAll.length;j++)
			{
				vectorAll[j]=new Vector();
			}
			Process=new int[proceNumber];
			sourceNumber=Integer.parseInt(sourceNumberText.getText());
			if(sourceNumber==1)
			{
				requestAlternate.setEditable(false);
				requestTextField.setEditable(false);
			}
			setMax();
			firstFrame.setVisible(true);
			secondFrame.setVisible(false);
		}
		if(e.getSource()==resultButton)
		{
			
			list=new JList(vectorAllF);
			if(vectorAllF.size()>0)
			{
				String string="安全序列共"+vectorAllF.size()+"个";
				label1.setText(string);
			}
			if(vectorAllF.size()==0)
			{
				String string="不存在安全序列";
				label1.setText(string);
			}
	        
			JScrollPane panelThirdFrame = new JScrollPane(list);
			thirdPanel2.add(panelThirdFrame);
			thirdFrame.setVisible(true);
		}
		if(e.getSource()==nextButton)
		{
			clear();
            
		}
		if(e.getSource()==testButton)
		{
			getInformation();
			test();
	    	for(int h=0;h<system.length;h++)
	    	{
	    		systemF[h]=system[h];
	    	}
			secure(vectorAll);
			for(int j=0;j<vectorAll.length;j++)
			{
				if(vectorAll[j].size()!=0)
				{
					vectorAllF.addElement(vectorAll[j].elementAt(0));
				}
			}
		}
		if(e.getSource()==frame3Button)
		{
			thirdFrame.setVisible(false);
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -