主要是在OPT算法中的超出容量list的部分存在问题
public OPT(int[] arr) {
for (int i = 0; i < arr.length; i++) {
if (list.size() < capacity) { // 小于list初始容量
if (!list.contains(arr[i])) { // list没有该页面,将其添加进list尾部
list.add(arr[i]);//列表+1
} else {
continue;
}
} else {// 超出list容量
index[0] = 100;
index[1] = 101;
if (!list.contains(arr[i])) { // 下一个页面如果不在list中
int a = 0;
for (int j = i; j < arr.length; j++) {
if (list.contains(arr[j])) { // arr[j]这个页面会在测试数据中会出现较早
if (index[0] != list.indexOf(arr[j])) {
//indexOf()的用法:查找arr[j]中,第一次出现指定字符串的位置。 位置不是下标为0
index[a++] = list.indexOf(arr[j]);// 返回此列表中首次出现的指定元素的索引
if (a == 2) {
break;
}
}
}
}
list.set(noExist(), arr[i]);// 置换掉永不使用的,或许在最长时间内不再访问的页面
} else { // 下一个页面在list中
continue;//列表保持不变
}
}
traverse();//调用traverse函数
}
System.out.println("访问页面需从外存调入的次数为:"+(num-1));//计算访问页面需要从外存调入的次数
System.out.println("缺页率为:"+(1-(float)(num-1)/arr.length));//计算缺页率
}
以下是我参考的链接文档
https://blog.csdn.net/AdvancingStone/article/details/79110586
我在LRU算法的代码解释以及该程序调用的MyStack中也存在问题,请大佬们给我具体解释,最好有每一句代码的解释,我不懂的不是这些算法的原理,而是整个运算的代码过程,感谢了!