Swing程序
swing吧
全部回复
仅看楼主
level 1
import javax.swing.JOptionPane;
/*
可变分区首次适应算法
*/
public class Distribution1 {
int size=0;
public int j;//用于记录内存分块数
int[] part=new int[1000];//用于记录内存分块的大小
int[] address=new int[1000];//用于记录内存分块的起始地址
int[] flag=new int[1000];//用于记录内存分块的分配情况
String Suggestion;
Distribution1(){
for(int i=0;i<1000;i++)
{
part[i]=0;
address[i]=0;
flag[i]=0; }
}// end Distribution1() {
void Input(){
Suggestion=JOptionPane.showInputDialog("请输入可分配内存的大小:"); //JOptionPane.showInputDialog方法返回用户输入的字符串
size=Integer.parseInt(Suggestion); }//end Input()
void Output(){
Suggestion="| "+"分区号"+" | "+"分区大小"+" | "+"起始地址"+" | "+"状态"+" |";
for(int k=0;k<=j;k++)
{
Suggestion+="\n| "+k+" | ";
Suggestion+=part[k]+" | ";
Suggestion+=address[k]+" | ";
Suggestion+=flag[k]+" |"; }
JOptionPane.showMessageDialog(null, Suggestion,"内存分配情况 ",JOptionPane.INFORMATION_MESSAGE); }//end Output()
void Begin(){
char s='y';
int i=0;
int count=0;
Suggestion=JOptionPane.showInputDialog("请输入内存的起始地址:");
address[i]=Integer.parseInt(Suggestion);//记录首地址
Suggestion=JOptionPane.showInputDialog("请输入第0块分区的大小:");
part[i]=Integer.parseInt(Suggestion);//记录第0块分区的大小
count=part[i];
flag[i]=1;
i++;
j++;
Suggestion=JOptionPane.showInputDialog("是否继续分块,是请输入'y'或'Y',否请输入任意字符:");
s=Suggestion.charAt(0);
while(s=='y'||s=='Y')
{
Suggestion=JOptionPane.showInputDialog("请输入第"+i+"块分区的大小");
part[i]=Integer.parseInt(Suggestion);
if(size-count<part[i]){
JOptionPane.showMessageDialog(null, "剩余空间不足以分配!");
}
else
{
address[i]=address[i-1]+part[i-1];
flag[i]=1;
count=count+part[i];
i++;
j++; }
Suggestion=JOptionPane.showInputDialog("是否继续,是请输入'y'或'Y',否则请输入任意的字符:");
s=Suggestion.charAt(0); }//while(s=='y'||s=='Y')
part[i]=size-count;
address[i]=address[i-1]+part[i-1];
flag[i]=0;
}//end Begin()
void Restore(){
//可作改进,在Suggestion中输入所有要回收的内存块,再将其解析出来。
char s;
int i;
int k=0;
int count=0;
int tag=0;
int number[]={'0','1','2','3','4','5','6','7','8','9'};
Suggestion=JOptionPane.showInputDialog("是否要回收内存,是请输入'y' 或'Y',否请输入任意的字符:");
s=Suggestion.charAt(0);
if(s=='y'||s=='Y'){
Suggestion=JOptionPane.showInputDialog("请输入要回收的内存块号,中间以空格相间并以空格结尾:");
for(i=0;i<Suggestion.length();i++)
{
if(Suggestion.charAt(i)!=' ')//
{
for(k=0;k<10;k++)
{
if(Suggestion.charAt(i)==number[k])
{
tag=k+tag*10;//提取字符串中的整数
}//if
//for
//if
else{
if(tag>j){
JOptionPane.showMessageDialog(null,"输入的内存号不存 在,请重新输入!","Warning",JOptionPane.INFORMATION_MESSAGE);
continue;
}
else{
flag[tag]=0;
tag=0;
}
}
}//for
}//if
for(i=1;i<=j;i++)//合并连续的空闲空间
{
if(flag[i-1]==0&&flag[i]==0)
{
part[i-1]=part[i-1]+part[i];
count++;
for(k=i;k<=j;k++)
{
part[k]=part[k+1];
address[k]=address[k+1];
}//for
}//if
}//for
for(i=1;i<=j;i++)//移动flag数组的元素
{
if(flag[i-1]==0&&flag[i]==0)
{
for(k=i;k<=j;k++)
{
flag[k]=flag[k+1]; }//for
}//if
}//for
j=j-count;}}
}
public static void main(String arg[]){
JOptionPane.showMessageDialog(null, "\t\t\t\t\t可变分区首次适应算法","Title",JOptionPane.INFORMATION_MESSAGE);
Distribution1 distribute=new Distribution1();
distribute.Input();
distribute.Begin();
distribute.Output();
distribute.Restore();
distribute.Output();
System.exit(0);
}}
2015年12月23日 16点12分 1
level 1
添加个合并块的功能 谁能帮下。。。
2015年12月23日 16点12分 2
1