/**
* @(#)optsf.java
*
*
* @author
* @version 1.00 2010/11/30
*/
import java.io.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.math.*;
public class optsf extends JFrame {
JButton jb1=new JButton("创建"),
jb2=new JButton("运行"),
jb3=new JButton("查看"),
jb4=new JButton("结束");
JPanel p1=new JPanel();
JTextArea jt=new JTextArea();
int s[]=new int[100];
int num;
int sum;
int[][] ss;
public optsf() {
super("最佳页面置换算法");
p1.setLayout(new FlowLayout(FlowLayout.LEFT));
p1.add(jb1);
p1.add(jb2);
p1.add(jb3);
p1.add(jb4);
add(p1,BorderLayout.NORTH);
add(new JScrollPane(jt),BorderLayout.CENTER);
al listener=new al();
jb1.addActionListener(listener);
jb2.addActionListener(listener);
jb3.addActionListener(listener);
jb4.addActionListener(listener);
setSize(600,300);
setVisible(true);
setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
}
public void creat(){
double t;
String cs=JOptionPane.showInputDialog(null,"请输入要创建页面的个数:");
num=Integer.parseInt(cs);
for(int j=0;j<num;j++)
{
t = Math.random();
s[j]=(int)(num*t);
}
cs=JOptionPane.showInputDialog(null,"请输入物理块的个数:");
sum=Integer.parseInt(cs);
ss=new int[sum+1][num+1];
}
class al implements ActionListener{
public void actionPerformed(ActionEvent e){
if((JButton)e.getSource()==jb1)
creat();
else if((JButton)e.getSource()==jb2)
zhixing();
else if((JButton)e.getSource()==jb3)
chakan();
else if((JButton)e.getSource()==jb4)
System.exit(1);
}
}
public void chakan(){
String stext="";
for(int i=0;i<num;i++)
stext+=" "+s[i]+" ";
stext+='\n';
for(int j=0;j<sum;j++)
{ for(int i=0;i<num;i++)
if(ss[sum][i]==-1)
stext+=" "+ss[j][i]+" ";
else
stext+=" ";
stext+='\n';
}
jt.setText(stext);
}
public void zhixing(){
int sss[]=new int[sum];
int count=0,max=0;
for(int i=0;i<sum;i++)
for(int j=i;j<sum;j++)
{ ss[i][j]=s[i];
ss[sum][j]=-1;}
for(int j=sum;j<num;j++)
{ for(int i=0;i<sum;i++)
ss[i][j]=ss[i][j-1];
for(int i=0;i<sum;i++)
if(ss[i][j-1]==s[j])
ss[sum][j]=1;//如果物理块内有此页设标识符
if(ss[sum][j]!=1)
{for(int x=0;x<sum;x++)
{for(int y=j;y<num;y++)
if(ss[x][j]!=s[y])
count++;
else
break;
sss[x]=count;
count=0;
}
for(int x=1;x<sum;x++)
if(sss[max]<sss[x])
max=x;
ss[max][j]=s[j];
ss[sum][j]=-1;
}
}
}
public static void main(String ar[]){
optsf sf=new optsf();
}
}
- 1
- 2
前往页