Flask接口签名sign原理与实例代码浅析
298
2022-12-18
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 { 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 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 { Work[i]=Available[i]; } for(int i=0;i Finish[i]=false; //初值为false Finish[p]=true; //初次检查 for(int j=0;j { Work[j]=Work[j]+Allocation[p][j]; } temp[k++]=p; boolean found = false;//标记是否找到安全进程 while(k for(int i=0;i { boolean flag=true;//标记是否有足够资源 if(Finish[i]) continue ; for(int j=0;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 Work[j]=Work[j]+Allocation[i][j]; } } if(found) { found=false; } else break;//遍历,试分配失败跳出 } for(int i=0;i 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-untklNT4之间!"); jtf1.setText(""); return; } if(judge(p,Request))//初步分配检查 { if(SaftyCheck(p)){//安全性检查 ShowData(); jta1.append("\n\n 通过安全性检查!安全序列为:"); for(int i=0;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 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 已分配资源设置成功!"); } } 截图:
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~