Java 移动和重新组织数组

Java 移动和重新组织数组,java,arrays,Java,Arrays,我有一个数组,比如说:LRU_frame[]={4,1,0,3} 我有一个random()函数,可以输出一个随机数。如果随机数n包含在数组LRU_帧中,则n应位于LRU_帧[0]上,其他所有内容必须相应下移 例如,如果random()给我一个0,那么新的LRU_帧[]={0,4,1,3} 另一个例子,如果random()给我一个3,那么新的LRU_帧[]={3,4,1,0} 对于任意大小且包含任意数量元素的数组,如何执行此操作 我知道如何通过在LRU_帧[0]上添加新元素来移动数组,但不知道如何

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

我有一个random()函数,可以输出一个随机数。如果随机数n包含在数组LRU_帧中,则n应位于LRU_帧[0]上,其他所有内容必须相应下移

例如,如果random()给我一个0,那么新的LRU_帧[]={0,4,1,3}

另一个例子,如果random()给我一个3,那么新的LRU_帧[]={3,4,1,0}

对于任意大小且包含任意数量元素的数组,如何执行此操作

我知道如何通过在LRU_帧[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\u 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;
}
使用
Arrays.sort(LRU\U帧)
对整个数组进行排序,或
Arrays.sort(LRU\u frame、fromIndex、toIndex))
对数组的一部分进行排序

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;

}

Arrays
类还有其他有用的方法,比如
copyOfRange

我想这可能就是您想要的:

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;
}
public static void LRU\U shiftPageRef(字符a){
int index=indexOf(a);
如果(索引==-1){
//当前不在阵列中,因此使用in-newArray[0]创建一个比现有阵列大的新阵列1,或根据所需功能忽略该阵列。
}否则,如果(索引>0){
//将第一个条目设置为,并将现有条目向右移动
char insertChar=a;
char nextChar=LRU_帧[0];
对于(int i=0;i
为什么要将随机数转换为字符?或者你的意思是你有一个字符数组?你为什么必须使用一个数组而不是一个已经能够在任何位置动态增长和插入元素的ArrayList,将现有条目移动到右边?是的,这是一个字符数组。我这么说是为了消除对数字和字符的任何混淆。@jcmwright80:说得好!但是这个项目还有很多事情要做,我已经用数组写了所有的东西。我要花很多时间才能返回并更改所有内容:(虽然您的代码在大多数情况下运行良好,但当a=0时,LRU_框架保持不变。我运行了多个测试,但它对0无效。@summerNight fixed,第一个条件应该是