我有一个数组,让我们说:LRU_frame [] = {4,1,0,3}
我有一个random()函数,它会吐出一个随机数。如果随机数n包含在数组LRU_frame中,则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;
}
答案 0 :(得分:1)
你有一个好主意,你只需要在数组中找到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);
}
答案 1 :(得分:1)
我认为这可能是你所追求的事情:
public static void LRU_shiftPageRef(char a) {
int index = indexOf(a);
if (index == -1) {
//not currently in array so create a new array 1 bigger than existing with a in newArray[0] or ignore depending on functionality required.
} else if (index > 0) {
//Set first entry as a and shift existing entries right
char insertChar = a;
char nextChar = LRU_frame[0];
for (int i =0; i < index; i++) {
LRU_frame[i] = insertChar;
insertChar = nextChar;
nextChar = LRU_frame[i+1];
}
LRU_frame[index] = insertChar;
} else {
//do nothing a is already at first position
}
}
public static int indexOf(char a) {
for (int i=0; i < LRU_frame.length; i++) {
if (LRU_frame[i] == a) {
return i;
}
}
return -1;
}
答案 2 :(得分:0)
使用Arrays.sort(LRU_frame);
对整个数组进行排序,或使用Arrays.sort(LRU_frame, fromIndex, toIndex));
对数组的一部分进行排序。
Arrays
类还有其他有用的方法,例如copyOfRange
。