⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 experiment3.java

📁 银行家算法java版
💻 JAVA
字号:
import java.awt.*;
import java.awt.event.*;
class SDialog extends Dialog implements ActionListener
   {
      int sourcekind1;
      Label[] label;
      TextField[] text;
      int[] kinds;
      String[] skinds;
      Button button;
      char nem;
      GridBagLayout grid;
      GridBagConstraints c;
      SDialog(Frame f,String s,boolean b,int sourcekind1)
         {
            super(f,s,b);
            grid=new GridBagLayout();
            c=new GridBagConstraints();
            setLayout(grid);
            setBounds(100,100,200,50+30*sourcekind1);
            nem='A';
            label=new Label[sourcekind1];
            text=new TextField[sourcekind1];
            kinds=new int[sourcekind1];
            skinds=new String[sourcekind1];
            button=new Button("确定");
            this.sourcekind1=sourcekind1;
            for(int i=0;i<sourcekind1;i++)
               {
                  label[i]=new Label(nem+"类资源量为");
                  text[i]=new TextField(3);  
                  addComponent(label[i],i,0,2,1);  
                  addComponent(text[i],i,2,1,1);  
                  nem++;
               }
            addComponent(button,0,3,1,1);  
            button.addActionListener(this);
            addWindowListener(new WindowAdapter()
               {
                  public void windowClosing(WindowEvent e)
                     {
                        setVisible(false);
                     }
               });  
         }
      public void actionPerformed(ActionEvent e)
         {
             for(int i=0;i<sourcekind1;i++)
                {
                   skinds[i]=text[i].getText();
                   kinds[i]=Integer.parseInt(skinds[i]);              
                }
             setVisible(false);    
         }
      private void addComponent(Component component,int row,int column,int width,int hight)
         {
            c.gridx=column;
            c.gridy=row;
            c.gridwidth=width;
            c.gridheight=hight;
            grid.setConstraints(component,c);
            add(component);
         } 
   }
class PDialog extends Dialog implements ActionListener
   {
      int sourcekind1;
      int processnum1;
      char nem;
      Label labelM,labelA,label1;
      Label[] label,labelkinds1,labelkinds2;
      TextField[][] textMax,textAllo;
      int[][] textMaxCon,textAlloCon;
      Button button;
      GridBagLayout grid;
      GridBagConstraints c;
      PDialog(Frame f,String s,boolean b,int sourcekind1,int processnum)
         {
            super(f,s,b);
            grid=new GridBagLayout();
            c=new GridBagConstraints();
            setLayout(grid);
            processnum1=processnum;
            this.sourcekind1=sourcekind1;
            setBounds(100,100,300+50*sourcekind1,100+30*processnum);
            nem='A';
            button=new Button("确定");
            labelM=new Label("Max(资源)");
            label1=new Label("请输入各进程的详细信息:");
            labelA=new Label("Allocation(资源)");
            labelkinds1=new Label[sourcekind1];
            labelkinds2=new Label[sourcekind1];
            label=new Label[processnum];
            textMax=new TextField[sourcekind1][processnum];
            textAllo=new TextField[sourcekind1][processnum];
            textMaxCon=new int[sourcekind1][processnum];
            textAlloCon=new int[sourcekind1][processnum];
            addComponent(label1,0,0,5,1);       
            addComponent(labelM,1,2,sourcekind1,1);        
            addComponent(labelA,1,2+sourcekind1,sourcekind1,1);     
            for(int i=0;i<sourcekind1;i++)
               {
                  labelkinds1[i]=new Label(nem+" ");
                  labelkinds2[i]=new Label(nem+" ");
                  addComponent(labelkinds1[i],2,2+i,1,1);  
                  addComponent(labelkinds2[i],2,2+i+sourcekind1,1,1);  
                  nem++;
               }      
            for(int i=0;i<processnum;i++)
               {
                  label[i]=new Label("P"+(i+1)+"号进程:");
                  for(int j=0;j<sourcekind1;j++)
                     {
                        textMax[j][i]=new TextField(3);  
                        textAllo[j][i]=new TextField(3);  
                        addComponent(textMax[j][i],i+3,2+j,1,1);  
                        addComponent(textAllo[j][i],i+3,2+j+sourcekind1,1,1);  
                     }
                  addComponent(label[i],i+3,0,2,1);  
               }
            addComponent(button,0,2+2*sourcekind1,1,1);  
            button.addActionListener(this);
            addWindowListener(new WindowAdapter()
               {
                  public void windowClosing(WindowEvent e)
                     {
                        setVisible(false);
                     }
               });  
         }
      private void addComponent(Component component,int row,int column,int width,int hight)
         {
            c.gridx=column;
            c.gridy=row;
            c.gridwidth=width;
            c.gridheight=hight;
            grid.setConstraints(component,c);
            add(component);
         } 
      public void actionPerformed(ActionEvent e)
         {
            for(int i=0;i<processnum1;i++)
               {
                  for(int j=0;j<sourcekind1;j++)
                     {
                        String s1=textMax[j][i].getText();
                        String s2=textAllo[j][i].getText();
                        textMaxCon[j][i]=Integer.parseInt(s1);        
                        textAlloCon[j][i]=Integer.parseInt(s2);                 
                     }
               }
             setVisible(false);    
         }
   }
class DFrame extends Frame implements ActionListener
   {
      TextField text1,text2;
      TextArea textoutput;
      Label label1,label2;
      Button button1,button2,button3;
      SDialog sDialog;
      PDialog pDialog;
      int sourceskinds,processnum;
      GridBagLayout grid;
      GridBagConstraints c;
      DFrame(String s)
         {
            super(s);
            grid=new GridBagLayout();
            c=new GridBagConstraints();
            setLayout(grid);
            label1=new Label("请输入资源类型数");
            label2=new Label("请输入进程数");
            text1=new TextField(3);        
            text2=new TextField(3);    
            textoutput=new TextArea(5,30);
            button1=new Button("确定");
            button2=new Button("确定");
            button3=new Button("运行并察看结果");
            addComponent(label1,0,0,3,1);  
            addComponent(label2,1,0,3,1);  
            addComponent(text1,0,3,1,1);  
            addComponent(text2,1,3,1,1);  
            addComponent(button1,0,4,1,1);  
            addComponent(button2,1,4,1,1);  
            addComponent(button3,2,0,5,1);  
            addComponent(textoutput,3,0,5,3);              
            button1.addActionListener(this);
            button2.addActionListener(this);
            button3.addActionListener(this);
            setBounds(400,400,400,300);
            text2.setEditable(false);
            textoutput.setEditable(false);
            setVisible(true);
            addWindowListener(new WindowAdapter()
               {
                  public void windowClosing(WindowEvent e)
                     {
                        System.exit(0);
                     }
               });  
         }
      private void addComponent(Component component,int row,int column,int width,int hight)
         {
            c.gridx=column;
            c.gridy=row;
            c.gridwidth=width;
            c.gridheight=hight;
            grid.setConstraints(component,c);
            add(component);
         } 
      public void actionPerformed(ActionEvent e)
         {
            if(e.getSource()==button1)
               {
                  String s=text1.getText();
                  sourceskinds=Integer.parseInt(s);
                  sDialog=new SDialog(this,"各类资源量",true,sourceskinds);
                  sDialog.setVisible(true);
                  text2.setEditable(true);
               }
            else if(e.getSource()==button2)
               {
                  String s=text2.getText();
                  processnum=Integer.parseInt(s);
                  pDialog=new PDialog(this,"各进程参数",true,sourceskinds,processnum);
                  pDialog.setVisible(true);
               }
            else if(e.getSource()==button3)
               {
                  int boo1=0;
                  int num=0;
                  int[] processalive=new int[processnum];
                  int[] sourceremain=new int[sourceskinds];
                  int[][] processneed=new int[sourceskinds][processnum];
                  for(int i=0;i<processnum;i++)
                     {
                        processalive[i]=0;  
                      }
                  for(int i=0;i<sourceskinds;i++)
                     {
                        sourceremain[i]=sDialog.kinds[i];
                        for(int j=0;j<processnum;j++)
                           {
                              sourceremain[i]=sourceremain[i]-pDialog.textAlloCon[i][j];
                              processneed[i][j]=pDialog.textMaxCon[i][j]-pDialog.textAlloCon[i][j];   
                           }
                     }
                  while(num<=processnum)
                  {
                  int num2=0;
                  for(int j=0;j<processnum;j++)
                     {
                        boo1=0;
                        if(processalive[j]==0)
                           {
                              for(int i=0;i<sourceskinds;i++)   
                                 {
                                    if(processneed[i][j]>sourceremain[i])
                                       {
                                          boo1=1;
                                          break;
                                       }
                                 }
                              if(boo1==1)
                                 {
                                    num2++;
                                 }
                              if(boo1==0)
                                 {
                                    processalive[j]=1;
                                    if(j<(processnum-1))
                                       {
                                          textoutput.append("P"+(j+1)+" --> ");
                                       }
                                    else
                                          textoutput.append("P"+(j+1));
                                    for(int i=0;i<sourceskinds;i++)
                                       {
                                          sourceremain[i]=sourceremain[i]+pDialog.textAlloCon[i][j];
                                       }
                                    num++;
                                    break;
                                 } 
                           }
                     }
                     if(num==processnum)
                        {
                           textoutput.append("\n");
                           break;
                        }
                     if(num2==processnum)
                        {
                           textoutput.append("it's Unsafe\n");
                           break;
                        }
                  }
               }
         }
   }
public class Experiment3
   {
      public static void main(String args[])
         {
            new DFrame("银行家算法系统");
         } 
   }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -