2

私はこれらの数字の配列を通過することになっています.7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1 次に、最初の(繰り返さない数字)を保持する小さな配列に入れます数字は5つだけ。

したがって、最初の 5 つが入った後は、7 0 1 2 3 のようになります (配列内に 0 が既に存在していたため)。

次に、大きな配列の残りの各要素を検索して、小さな配列のすべての要素と比較することになっています。T

大きい方の配列の次の要素は 0 です。プログラムは 0 を小さい方の配列のすべての要素と比較する必要があります。

要素が小さい方の配列に存在する場合、小さい方の配列内に存在する要素のインデックスに等しい MRU 変数を設定するだけです。

数値が存在しない場合は、次の実行後のように 4 とします。その後、プログラムは MRU 変数の要素を数値 4 に置き換えます。

質問が 2 つあります。

  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からの素晴らしい助けの後、私は今、私が以前に抱えていた主な問題に直面しています。2番目の数値はゼロであると想定されているため、わからない最初または2番目の反復のみを認識します。これがめちゃくちゃな部分です:

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、ループ内に -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(" }");
}
于 2012-11-30T21:39:32.700 に答える