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

溫馨提示×

溫馨提示×

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

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

怎么用java實現銀行家算法

發布時間:2021-08-12 18:08:35 來源:億速云 閱讀:121 作者:chen 欄目:編程語言

本篇內容介紹了“怎么用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("");     }

截圖:

②算法實現代碼:

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

③事件響應函數:

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實現銀行家算法”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

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

AI

台山市| 讷河市| 曲阳县| 甘德县| 农安县| 江永县| 翁源县| 开江县| 马尔康县| 斗六市| 兴隆县| 乌鲁木齐县| 哈巴河县| 小金县| 仙居县| 黑山县| 永登县| 定兴县| 台山市| 泽普县| 永嘉县| 仪陇县| 大同县| 莱州市| 台江县| 庆阳市| 商洛市| 昆山市| 铜川市| 抚宁县| 木里| 宜昌市| 平塘县| 台东县| 道真| 建宁县| 屏山县| 井研县| 合山市| 新建县| 安丘市|