2012-11-30 42 views
2

我應該通過這些數字的陣列來準備,7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1然後把第一(非重複數)轉換成只包含5個數字的較小陣列。MRU頁面置換的Java

所以第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}。

編輯:好了,所以之後,從貓頭鷹一些驚人的幫助下,即時現在遇到了我之前是有這個主要問題。它只識別第一次或第二次迭代,因爲第二個數字應該是零,所以我不能分辨出來。這是搞亂的部分:

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

我已經從它的角度夫婦,但似乎沒有工作。

回答

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 -clause你的循環中。

你可能是指什麼,是這樣的:

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(" }"); 
} 
+0

太感謝你了!這幫助了一噸!現在我唯一的問題是它沒有識別任何不同的數字,它每次都打印出相同的東西。我要放置一些照片,看看它搞亂了什麼。希望這會有所幫助:D – Josh