银行家算法的java代码实现,Swing写的界面

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("");
        
 }
截图:

银行家算法的java代码实现,Swing写的界面_第1张图片

②算法实现代码:

public void myAllocation(int i)   //分配资源
 {   
		   for (int j=0;jNeed[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;iWork[j])    //资源不足,退出
			        {
			               flag=false;
			            break;
	                }
               }
		       if(flag) //找到资源
		              {
		       		  temp[k++]=i;//存储安全序列
		              Finish[i]=true;
		              found=true;         
		              for(int j=0;j

截图:

银行家算法的java代码实现,Swing写的界面_第2张图片

③事件响应函数:

public void actionPerformed(ActionEvent e) {
//事件响应函数
       if(e.getSource()==jb1){//按下“确定”            
              if(jcb1.getSelectedItem()=="Request"){             
              int p=0;         
        try{
              p=Integer.parseInt(jtf1.getText());
              Request[0]=Integer.parseInt(jtf2.getText());
              Request[1]=Integer.parseInt(jtf3.getText());
              Request[2]=Integer.parseInt(jtf4.getText());
        }catch(Exception d)
        {
               JOptionPane.showMessageDialog(this, "您输入有误!请重新输入!");
               ShowData();
               return;
        }
        if(p>4) //限定输入进程ID范围
               {
               JOptionPane.showMessageDialog(this, "PID在0-4之间!");
               jtf1.setText("");
               return;
               }
              if(judge(p,Request))//初步分配检查
              {                  
                     if(SaftyCheck(p)){//安全性检查                  
                    	     ShowData();
                             jta1.append("\n\n  通过安全性检查!安全序列为:");
                             for(int i=0;i4)
               {
                      JOptionPane.showMessageDialog(this, "进程ID在0-4之间!");
                      jtf1.setText("");
                      return;
                      }    
                     int Maxago[][]= new int[pno][sno];   //暂存最大需求                              
                     Max[p][0]=Integer.parseInt(jtf2.getText());
                     Max[p][1]=Integer.parseInt(jtf3.getText());
                     Max[p][2]=Integer.parseInt(jtf4.getText());               

                     for(int j=0;j=0)
                                   Need[p][j]=temp;
                                   else
                                   {
                                          JOptionPane.showMessageDialog(this, "最大需求过小!请重新输入!");
                                           Max=Maxago;
                                           ShowData();
                                           return;
                                   }                                       
                            }                  
        }catch(Exception d)
        {
               JOptionPane.showMessageDialog(this, "输入有误!请重新输入!");
               ShowData();
               return;
        }   
        	ShowData();                 
	        jta1.append("\n\n  最大需求设置成功!"); 
       }
          
              
      /**
        * 选择Allocation时!
        */
              
        else if(jcb1.getSelectedItem()=="Allocation"){//设置已分配资源
            int p = 0;
            try{
            	 p =Integer.parseInt(jtf1.getText());
                 if(p>4)
                 {
                  JOptionPane.showMessageDialog(this, "进程ID在0-4之间!");
                  jtf1.setText("");
                  return;
                  }                                   
                 Allocation[p][0]=Integer.parseInt(jtf2.getText());
                 Allocation[p][1]=Integer.parseInt(jtf3.getText());
                 Allocation[p][2]=Integer.parseInt(jtf4.getText());}
              catch(Exception d)
              {
                     JOptionPane.showMessageDialog(this, "输入有误!请重新输入!");
                     ShowData();
                     return;
              }   
              ShowData();                 
              jta1.append("\n\n 已分配资源设置成功!"); 
             }

          }      

截图:

银行家算法的java代码实现,Swing写的界面_第3张图片


你可能感兴趣的:(java开发)