91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java實現銀行家算法的示例

發布時間:2021-04-15 10:03:58 來源:億速云 閱讀:359 作者:小新 欄目:編程語言

這篇文章主要介紹了java實現銀行家算法的示例,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

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實現銀行家算法的示例

②算法實現代碼:

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;
 }

截圖:

java實現銀行家算法的示例

③事件響應函數:

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;i<pno;i++)//打印安全序列
               jta1.append("P"+String.valueOf(temp[i])+" ");
               jta1.append(" 批準請求,資源已分配!");
               myAllocation(p);//檢查到安全序列才分配
           }else //不安全
              {             
             ShowData();
                  //jta1.append("\n\n  找不到安全序列!  不批準請求!");
                  JOptionPane.showMessageDialog(this, "找不到安全序列!  不批準請求!");
              }
       }else{
         ShowData();
           jta1.append("\n\n 系統資源不足!"); 
       }      
    }
   /***
    * 選擇avaliable時!    
    */
       
    
    else if(jcb1.getSelectedItem()=="Available"){//設置可用資源 
       try{
           Available[0]= Integer.parseInt(jtf2.getText());
           Available[1]=Integer.parseInt(jtf3.getText());
           Available[2]=Integer.parseInt(jtf4.getText());
    }catch(Exception d)
    {
        JOptionPane.showMessageDialog(this, "您輸入有誤!請重新輸入!");
        ShowData();
        return;
    }
      ShowData();  
      jta1.append("\n\n  可用資源設置成功!");    
    }
   
       /**
    * 選擇Max時! 
    */
    
   else if(jcb1.getSelectedItem()=="Max"){//設置最大需求源      
       int p = 0;    
       try{
           p =Integer.parseInt(jtf1.getText());
           if(p>4)
        {
           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<sno;j++){   //判斷設置是否合理
                  int temp =Max[p][j]-Allocation[p][j];
                  if(temp>=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實現銀行家算法的示例

感謝你能夠認真閱讀完這篇文章,希望小編分享的“java實現銀行家算法的示例”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南乐县| 永康市| 右玉县| 龙陵县| 中西区| 梅州市| 喀喇沁旗| 吉林省| 新和县| 宁陵县| 克什克腾旗| 友谊县| 华坪县| 仪征市| 泽普县| 镶黄旗| 福建省| 禹州市| 北海市| 开平市| 保靖县| 北流市| 安丘市| 江北区| 浦县| 孝昌县| 浮梁县| 嘉荫县| 乌兰浩特市| 固阳县| 乐昌市| 宜君县| 连州市| 繁峙县| 黄平县| 长汀县| 沽源县| 保康县| 昌吉市| 靖西县| 元阳县|