2

我应该通过这些数字的数组, 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。然后程序会将 MRU 变量处的元素替换为数字 4。

我有两个问题,

  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];
        }

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

4

1 回答 1

1
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(" }");
}
于 2012-11-30T21:39:32.700 回答