java實(shí)現(xiàn)銀行家算法(Swing界面)
java代碼實(shí)現(xiàn)了銀行家算法,界面寫(xiě)的個(gè)人認(rèn)為還是較為細(xì)致的,完整的實(shí)現(xiàn)了找安全序列等算法功能,可作為參考學(xué)習(xí)銀行家算法。
直接上代碼:①界面展示方法:
public void ShowFrame() { this.setSize(500, 350); //大小 this.setAlwaysOnTop(true); this.setResizable(false);//不可拖動(dòng) 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(); //顯示數(shù)據(jù) jta1.setLineWrap(true); //自動(dòng)適應(yīng) 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 進(jì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(""); }
截圖:
②算法實(shí)現(xiàn)代碼:
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;//標(biāo)記是否找到安全進(jìn)程 while(k<pno-1){ //遍歷查找安全序列 for(int i=0;i<pno;i++) { boolean flag=true;//標(biāo)記是否有足夠資源 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;//存儲(chǔ)安全序列 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; }
截圖:
③事件響應(yīng)函數(shù):
public void actionPerformed(ActionEvent e) { //事件響應(yīng)函數(shù) 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, "您輸入有誤!請(qǐng)重新輸入!"); ShowData(); return; } if(p>4) //限定輸入進(jìn)程ID范圍 { JOptionPane.showMessageDialog(this, "PID在0-4之間!"); jtf1.setText(""); return; } if(judge(p,Request))//初步分配檢查 { if(SaftyCheck(p)){//安全性檢查 ShowData(); jta1.append("\n\n 通過(guò)安全性檢查!安全序列為:"); for(int i=0;i<pno;i++)//打印安全序列 jta1.append("P"+String.valueOf(temp[i])+" "); jta1.append(" 批準(zhǔn)請(qǐng)求,資源已分配!"); myAllocation(p);//檢查到安全序列才分配 }else //不安全 { ShowData(); //jta1.append("\n\n 找不到安全序列! 不批準(zhǔn)請(qǐng)求!"); JOptionPane.showMessageDialog(this, "找不到安全序列! 不批準(zhǔn)請(qǐng)求!"); } }else{ ShowData(); jta1.append("\n\n 系統(tǒng)資源不足!"); } } /*** * 選擇avaliable時(shí)! */ else if(jcb1.getSelectedItem()=="Available"){//設(shè)置可用資源 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, "您輸入有誤!請(qǐng)重新輸入!"); ShowData(); return; } ShowData(); jta1.append("\n\n 可用資源設(shè)置成功!"); } /** * 選擇Max時(shí)! */ else if(jcb1.getSelectedItem()=="Max"){//設(shè)置最大需求源 int p = 0; try{ p =Integer.parseInt(jtf1.getText()); if(p>4) { JOptionPane.showMessageDialog(this, "進(jìn)程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++){ //判斷設(shè)置是否合理 int temp =Max[p][j]-Allocation[p][j]; if(temp>=0) Need[p][j]=temp; else { JOptionPane.showMessageDialog(this, "最大需求過(guò)?。≌?qǐng)重新輸入!"); Max=Maxago; ShowData(); return; } } }catch(Exception d) { JOptionPane.showMessageDialog(this, "輸入有誤!請(qǐng)重新輸入!"); ShowData(); return; } ShowData(); jta1.append("\n\n 最大需求設(shè)置成功!"); } /** * 選擇Allocation時(shí)! */ else if(jcb1.getSelectedItem()=="Allocation"){//設(shè)置已分配資源 int p = 0; try{ p =Integer.parseInt(jtf1.getText()); if(p>4) { JOptionPane.showMessageDialog(this, "進(jìn)程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, "輸入有誤!請(qǐng)重新輸入!"); ShowData(); return; } ShowData(); jta1.append("\n\n 已分配資源設(shè)置成功!"); } }
截圖:
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- java swing 創(chuàng)建一個(gè)簡(jiǎn)單的QQ界面教程
- Java圖形界面Swing原理及用法解析
- Java Swing仿QQ登錄界面效果
- Java圖形用戶(hù)界面設(shè)計(jì)(Swing)的介紹
- 使用java swing實(shí)現(xiàn)qq登錄界面示例分享
- 情人節(jié)寫(xiě)給女朋友Java Swing代碼程序
- Java swing實(shí)現(xiàn)支持錄音等功能的鋼琴程序
- 跟我學(xué)Java Swing之游戲設(shè)計(jì)(1)
- 跟我學(xué)Java Swing之游戲設(shè)計(jì)(2)
- Java Swing程序設(shè)計(jì)實(shí)戰(zhàn)
相關(guān)文章
Hutool開(kāi)發(fā)MapUtil工具類(lèi)使用示例
這篇文章主要為大家介紹了Hutool開(kāi)發(fā)MapUtil工具類(lèi)使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10Java利用EasyExcel解析動(dòng)態(tài)表頭及導(dǎo)出實(shí)現(xiàn)過(guò)程
以前做導(dǎo)出功能,表頭和數(shù)據(jù)都是固定的,下面這篇文章主要給大家介紹了關(guān)于Java利用EasyExcel解析動(dòng)態(tài)表頭及導(dǎo)出實(shí)現(xiàn)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12springBoot使用JdbcTemplate代碼實(shí)例
這篇文章主要介紹了springBoot使用JdbcTemplate代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09Springboot輕量級(jí)的監(jiān)控組件SpringbootAdmin
這篇文章主要為大家介紹了Springboot輕量級(jí)的監(jiān)控組件SpringbootAdmin使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02java String類(lèi)功能、原理與應(yīng)用案例【統(tǒng)計(jì)、判斷、轉(zhuǎn)換等】
這篇文章主要介紹了java String類(lèi)功能、原理與應(yīng)用案例,結(jié)合實(shí)例形式詳細(xì)分析了java String類(lèi)的基本功能、構(gòu)造方法,以及使用String類(lèi)實(shí)現(xiàn)統(tǒng)計(jì)、判斷、轉(zhuǎn)換等功能相關(guān)操作技巧,需要的朋友可以參考下2019-03-03JavaWeb響應(yīng)下載功能實(shí)例代碼(包含工具類(lèi))
今天通過(guò)本文給大家分享的是關(guān)于javaweb的響應(yīng)(response)下載功能,需要的朋友參考下吧2017-07-07Jackson2的JsonSchema實(shí)現(xiàn)java實(shí)體類(lèi)生成json方式
這篇文章主要介紹了Jackson2的JsonSchema實(shí)現(xiàn)java實(shí)體類(lèi)生成json,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11springboot實(shí)現(xiàn)敏感字段加密存儲(chǔ)解密顯示功能
這篇文章主要介紹了springboot實(shí)現(xiàn)敏感字段加密存儲(chǔ),解密顯示,通過(guò)mybatis,自定義注解+AOP切面,Base64加解密方式實(shí)現(xiàn)功能,本文通過(guò)代碼實(shí)現(xiàn)給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-02-02springboot加載命令行參數(shù)ApplicationArguments的實(shí)現(xiàn)
本文主要介紹了springboot加載命令行參數(shù)ApplicationArguments的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04