我有一个数组,可以说:LRU_frame [] = {4,1,0,3}

我有一个random()函数,它会吐出一个随机数。如果数组LRU_frame中包含随机数n,则n应该在LRU_frame [0]上,并且所有其他内容都必须相应地下移。

例如,如果random()给我0,则新的LRU_frame [] = {0,4,1,3}

另一个示例,如果random()给我3,则新的LRU_frame [] = {3,4,1,0}

如何对其中包含任意数量的任何数组大小执行此操作?

我知道如何通过在LRU_frame [0]上添加新元素来移动数组,但不知道如何像我需要的那样重新组织数组。

这是我到目前为止的代码,我们假设char a是要使用和重新组织数组的随机数(强制转换为char)。

public static void LRU_shiftPageRef(char a) {
    for (int i = (LRU_frame.length - 2); i >= 0; i--) {

        LRU_frame[i + 1] = LRU_frame[i];
    }
    LRU_frame[0] = a;

}

最佳答案

您有一个好主意,只需要找到数组中a元素的位置并从中开始循环即可,而不是LRU_frame.length

int index = -1;

// find the positon of 'a' in the array
for (int i = 0; i <= (LRU_frame.length - 1); i++) {
    if (LRU_frame[i] == a) {
        index = i;
        break;
    }
}

// if it is present, do roughly the same thing as before
if (index > -1) {
    for (int i = (index - 1); i >= 0; i--) {
        LRU_frame[i + 1] = LRU_frame[i];
    }
    LRU_frame[0] = a;
}


但是,如果可以使用ArrayLists,它将变得更加容易。

// declaration
ArrayList<Integer> LRU_frame = new ArrayList<Integer>();

...

if (LRU_frame.contains(a)) {
    LRU_frame.remove((Integer) a);
    LRU_frame.add(0, a);
}

09-10 08:03