栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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 tAllocationNeed    tAvailablen");    
    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("nn   "+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;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;iWork[j])  //资源不足,退出
      {
  flag=false;
 break;
  }
 }
     if(flag) //找到资源
 {
temp[k++]=i;//存储安全序列
 Finish[i]=true;
 found=true;     
 for(int j=0;j

截图:

③事件响应函数:

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("nn 通过安全性检查!安全序列为:");
 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("nn 最大需求设置成功!"); 
    }
     

   

    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("nn 已分配资源设置成功!"); 
}
 
}

截图:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/135683.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号