gpt4 book ai didi

java - MRU 页面替换 Java

转载 作者:行者123 更新时间:2023-11-30 11:38:22 27 4
gpt4 key购买 nike

我应该遍历这些数字的数组,7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1 然后将第一个(非重复数字)放入一个较小的仅包含 5 个数字的数组。

所以在前五个进入后,它看起来像 7 0 1 2 3(因为 0 已经存在于数组中)。

然后它应该搜索并比较较大数组其余部分中的每个元素与较小数组中的每个元素。

较大数组中的下一个元素是 0,程序需要将 0 与较小数组中的所有元素进行比较。

如果元素存在于较小的数组中,它只是应该设置一个 MRU 变量等于较小数组中存在的元素的索引。

如果数字不存在,比如下一次运行后,4。然后程序将用数字 4 替换 MRU 变量中的元素。

我有两个问题,

  1. 这个程序只是向我吐出原始数字和 idk,为什么?
  2. 我从这里去哪里?

我已经为此工作了很多天,经历了无数变体。它已经过了截止日期,但我想学习如何做到这一点。

   import java.util.*;
import java.io.*;

public class MRUPageReplacement
{
public static void main(String [] args)
{
//======== Variables ==============================================
ArrayList<Integer>MRUList = new ArrayList<Integer>();
int [] frames = {7,0,1,2,3};
int i,j,MRU;
String line;


//======== File Reader ============================================
try
{
FileReader reader = new FileReader("MRU.txt");
BufferedReader r = new BufferedReader(reader);
while ((line=r.readLine())!=null)
{
MRUList.add(Integer.parseInt(line));
}
}
catch(Exception e)
{
System.out.println("File Not Found");
}

int[] array = new int [MRUList.size()];
for (i =0; i < MRUList.size(); i++)
{
array[i] = MRUList.get(i);
}

//======== Fill Arrays ==============================================


//======== Compare ==============================================
for(i=0; i<array.length; i++)
{ // Iterate through the array
for( j=0; j<frames.length; j++)
{ // Iterate through frames
if(array[i] == frames[j])
{
// if the element is in frames
MRU = j;
}
else {
// if the element is not in frames
frames[MRU] = array[i];

}
}
}


/*======== Print ==============================================
for(i=0; i<frames.length; i++)
{
System.out.println("frames : " + frames[i]);
}
*/

}
}




// Sample output
frames : 7
frames : 0
frames : 1
frames : 2
frames : 3
frames : 0
frames : 0
frames : 1
frames : 2
frames : 3
frames : 0
frames : 1
frames : 1
frames : 2
frames : 3
frames : 0
frames : 1
frames : 2
frames : 2
frames : 3
frames : 0
frames : 1
frames : 2
frames : 2
frames : 3
frames : 3
frames : 1
frames : 2
frames : 2

附带说明一下,当我尝试打印出数组而不仅仅是数字时,它给出了这个:[I@565b540e.那是因为它正在打印索引吗?

最终我想在每次运行时打印出帧数组。喜欢:运行 1:帧 = {70123}。

编辑:好的,在 Noctua 的一些惊人帮助之后,我现在遇到了我之前遇到的主要问题。它只识别我无法分辨的第一次或第二次迭代,因为第二个数字应该是零。这是搞砸的部分:

for(i=0; i<array.length; i++) 
{ // Iterate through Array
for( j=0; j<frames.length; j++)
{ // Iterate through Frames
if(array[i] == frames[j])
{
// Item from Array exists in Frames
MRU = j;
MRU_found = true;
}
}
if(!MRU_found)
{
frames[MRU] = array[i];
}

我从几个角度研究过它,但似乎没有任何效果。

最佳答案

for(i=0; i<array.length; i++) {        // Iterate through the array
for( j=0; j<frames.length; j++) { // Iterate through frames
if(array[i] == frames[j]) { // if the element is in frames
MRU = j;
} else {
// if the element is not in frames
frames[MRU] = array[i];
}
}
}

这是你的错误所在。不是搜索整个 frames 数组然后检查您是否遇到了框架,而是将 else 子句放在循环中。

你的意思可能是这样的:

for(i = 0; i < array.length; i++) {
for(j = 0; j < frames.length && !MRU_found; j++) {
if(array[i] == frames[j]) {
MRU = j;
MRU_found = true;
}
}
if(!MRU_found) {
frames[MRU] = array[i];
}
}

编辑:关于你的问题,你正在打印的是内存中数组的地址。

要每次打印数组,将代码更改为:

for(i = 0; i < array.length; i++) {
for(j = 0; j < frames.length && !MRU_found; j++) {
if(array[i] == frames[j]) {
MRU = j;
MRU_found = true;
}
}
if(!MRU_found) {
frames[MRU] = array[i];
}
System.out.print("frams: {");
for(j = 0; j < frames.length; j++) {
System.out.print(" ");
System.out.print(frames[j]);
}
System.out.println(" }");
}

关于java - MRU 页面替换 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13653412/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com