• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

java 搞代码 4年前 (2022-01-05) 130次浏览 已收录 0个评论

这篇文章主要为大家详细介绍了银行家算法的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(""); }

截图:

②算法实现代码:

 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;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;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;jWork[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.<mark style="color:transparent">来源gaodaimacom搞#代%码网</mark>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 已分配资源设置成功!"); } }

截图:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持gaodaima搞代码网

以上就是java实现银行家算法(Swing界面)的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:java实现银行家算法(Swing界面)

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址