import java.util.LinkedList;
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
while(true) {
int pages = 0;// 定义页面框数
int num = 0;// 定义选择数字
Scanner scan = new Scanner(System.in);
System.out.println("请输入用户访问序列走向:");
String str = scan.nextLine();// 获取序列
String[] str1 = str.split(" ");// 将获取的访问序列用分隔符空格分装到字符串数组里
int[] seq = new int[str1.length];// 定义访问序列
for (int i = 0; i < str1.length; i++) {
seq[i] = Integer.valueOf(str1[i]);// 将String数组转化为int数组
}
System.out.println("请输入页面框数:");
pages = scan.nextInt();// 获取页面框数
System.out.println("**** 1.FIFO ****");
num = scan.nextInt();// 获取选择的数字
int page_break = 0;
switch (num) {
case 1:
page_break = 0;
LinkedList<Integer> list = new LinkedList<Integer>();
for (int i = 0; i < seq.length; i++) {
if (list.contains(seq[i])) {// 如果即将访问的序列在物理块中,直接跳过
continue;
} else {// 如果即将访问的序列不在物理块中,添加到物理块中;如果满了,找到最久不被访问的序列,并删除替换
if (list.size() != pages) {
list.addLast(seq[i]);// 该方法表示将指定的元素追加到此列表的末尾
page_break++;//访问序列不存在,断页加一
} else {
list.removeFirst();// 删除第一个元素
list.addLast(seq[i]);// 追加最后一个新元素
page_break++;// 置换,断页加一
}
}
}
break;
default:
System.out.println("输入错误,请重新输入");
break;
}
// 输出结果
System.out.println("缺页次数:" + page_break + "\n缺页中断率:" + page_break * 1.0 / seq.length);
}
}
}
运行结果
![](https://img-blog.csdnimg.cn/img_convert/323dc9eedff731133b4fadb05ac7a450.png)