当前位置 主页 > 网站技术 > 代码类 >

    java实现银行家算法(Swing界面)

    栏目:代码类 时间:2019-12-26 15:09

    java代码实现了银行家算法,界面写的个人认为还是较为细致的,完整的实现了找安全序列等算法功能,可作为参考学习银行家算法。

    直接上代码:①界面展示方法:

    public void ShowFrame()       
     {
           this.setSize(500, 350);  //大小      
           this.setAlwaysOnTop(true);
           this.setResizable(false);//不可拖动        
           this.setLayout(new BorderLayout());
           this.setTitle("lly_banktest");
           
           jp1=new JPanel();
           String s[]= {"Allocation","Max","Available","Request"};
           jcb1=new JComboBox(s);
           jp1.add(jcb1);    
           jp1.add(new JLabel("PID:"));
           jtf1=new JTextField(3);
           jp1.add(jtf1);
           jp1.add(new JLabel("A:"));
           jtf2=new JTextField(3);    
           jp1.add(jtf2);
           jp1.add(new JLabel("B:"));
           jtf3=new JTextField(3);    
           jp1.add(jtf3);
           jp1.add(new JLabel("C:"));
           jtf4=new JTextField(3);    
           jp1.add(jtf4);
           jb1=new JButton("确定");
           jp1.add(jb1);
           jb1.addActionListener(this);
           this.add(jp1,"South");                 
            jta1= new JTextArea();      //显示文件本域   
            ShowData();           //显示数据    
            jta1.setLineWrap(true);      //自动适应
            int r,g,b;
            jta1.setBackground(Color.white);
            jta1.setEditable(false);    
            this.add(jta1,"Center"); 
           // Font f=new Font("Dialog",Font.BOLD,12);  //
            jp1.setBackground(new java.awt.Color(128,255,128));
     }
     public void ShowData(){ 
        jta1.setText(" Max \tAllocation       Need    \tAvailable\n");    
        jta1.append("\n"+"  资源:  " + " A    B   C     " +"   A    B   C  " +
              "    A    B   C  " +"    A    B   C"); 
        jta1.append("\n  进程\n   "+pname[0]+"     " +
                  +Max[0][0]+"    "+Max[0][1]+"   "
                  +Max[0][2]+"     " +
                     "   "+Allocation[0][0]+"    "+Allocation[0][1]
               +"    "+Allocation[0][2]+"  " +
                     "     "+Need[0][0]+"    "+Need[0][1]
               +"   "+Need[0][2]+"  " +
                     "    "+Available[0]+"    "+Available[1]+
                     "   "+Available[2]);
        for(int i=1;i<5;i++)
        {
        jta1.append("\n\n   "+pname[i]+"  " +
              "   "+Max[i][0]+"    "+Max[i][1]+"   "+Max[i][2]+"     " +
                  "   "+Allocation[i][0]+"    "+Allocation[i][1]
            +"    "+Allocation[i][2]+"  " +
                  "     "+Need[i][0]+"    "+Need[i][1]
            +"   "+Need[i][2]+"  " );
        }
        jtf1.setText("");
        jtf2.setText("");
        jtf3.setText("");
        jtf4.setText("");
        
     }

    截图:

    ②算法实现代码:

    public void myAllocation(int i)  //分配资源
     {  
       for (int j=0;j<sno;j++)
      {
      Available[j]=Available[j]-Request[j];
      Allocation[i][j]=Allocation[i][j]+Request[j];
      Need[i][j]=Need[i][j]-Request[j];
      }
     }
     
     
     public boolean judge(int i, int Request[] )  //初步检查是否有足够资源  
     { 
        boolean choice=false;
        for(int j=0;j<sno;j++){
         if(Request[j]>Need[i][j]) 
         break;   
         if(Request[j]>Available[j]) 
         break;
         else choice=true;
        } 
        return choice; 
     }
     
     
     public boolean SaftyCheck(int p)    //安全性检查
     {  
      int k = 0;
      boolean b=true;
      Work=new int[sno];    //定义工作向量并赋初值
      Finish=new boolean[pno]; 
      for(int i=0;i<sno;i++) 
      {
       Work[i]=Available[i]; 
      }
      for(int i=0;i<pno;i++) 
      Finish[i]=false; //初值为false 
      Finish[p]=true; //初次检查
      for(int j=0;j<sno;j++)//释放资源
      {
      Work[j]=Work[j]+Allocation[p][j];
      }
      temp[k++]=p;
      boolean found = false;//标记是否找到安全进程 
      
      while(k<pno-1){    //遍历查找安全序列
      for(int i=0;i<pno;i++)
       {
          boolean flag=true;//标记是否有足够资源
         if(Finish[i]) continue ; 
         for(int j=0;j<sno;j++)
         {      
          if(Need[i][j]>Work[j])  //资源不足,退出
          {
             flag=false;
            break;
             }
            }
         if(flag) //找到资源
            {
           temp[k++]=i;//存储安全序列
            Finish[i]=true;
            found=true;     
            for(int j=0;j<sno;j++)//释放资源
             Work[j]=Work[j]+Allocation[i][j];
            }  
         }
        if(found) 
        {
       found=false;
        }
        else break;//遍历,试分配失败跳出 
      }
      
      for(int i=0;i<pno;i++){  //若存在false,则跳出
         if(!Finish[i])
          {
             b=false;
             break;
            }
      }
      return b;
     }