私はこれらの数字の配列を通過することになっています.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 つあります。
- このプログラムは、元の数値と idk を吐き出すだけです。なぜですか?
- ここからどこへ行けばいいですか?
私はこれに何日も取り組み、無数のバリエーションを経てきました。既に期限を過ぎていますが、これを行う方法を学びたいです。
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];
}
私はいくつかの角度からそれに取り組みましたが、何も機能していないようです。