Java 在阵列中旋转四倍

Java 在阵列中旋转四倍,java,arrays,generics,rotation,Java,Arrays,Generics,Rotation,给定的是一个通用数组T[]arr。该数组中的每四个元组应向左旋转,因此 “a b c d e f”-->“b c d a e f” 如果阵列末端不是完整的四元组,则这些元素不应旋转 我的想法是: T[] arr2; int x; T temp0 = arr[x+0]; T temp1 = arr[x+1]; T temp2 = arr[x+2]; T temp3 = arr[x+3]; arr2[x+3] = temp0; arr2[x+2] = temp3; arr2[x+1]

给定的是一个通用数组T[]arr。该数组中的每四个元组应向左旋转,因此

“a b c d e f”-->“b c d a e f”

如果阵列末端不是完整的四元组,则这些元素不应旋转

我的想法是:

T[] arr2;

int x;

T temp0 = arr[x+0];

T temp1 = arr[x+1];

T temp2 = arr[x+2];

T temp3 = arr[x+3];

arr2[x+3] = temp0;

arr2[x+2] = temp3;

arr2[x+1] = temp2;

arr2[x+0] = temp1;

x += 1;
因此,我正在切换第一个四元组的元素,并将它们保存到第二个数组中。
但是我如何实现,一个不完整的四极体不旋转,它停止阵列的末端?

使用
arr.length
。在每次赋值时,检查数组的长度是否小于当前的值。

执行以下操作以处理每个四元组。注意,我的代码假设您正确定义了arr和arr2

这是如果您希望结果出现在新数组中
arr2

for(int i = 3; i < arr.length; i += 4) // i is pointing at the end of each quadruple, so it will never show an incomplete one
{
    arr2[i-3] = arr[i-2];
    arr2[i-2] = arr[i-1];
    arr2[i-1] = arr[i];
    arr2[i] = arr[i-3];
}

int nbRemainingElements = arr.length % 4;
for(int i = 0; i < nbRemainingElements; ++i)
{
    int index = arr.length - i - 1;
    arr2[index] = arr[index];
}

顺便说一句,如果您想要两个不同的数组,一个解决方案也可以是使用
数组复制arr。复制
,然后应用解决方案2

您需要将代码放入一个循环中(您的问题中可能遗漏了这一点) 请注意:

  • 尽早完成循环,不包括最后一个未完成的四倍体(因此限制
    length-3
    ,这也防止了越界异常,因为如果只剩下3项,检查四倍体就没有意义了
  • 只需按原样复制阵列的其余部分
  • 示例代码如下:

    int x = 0;
    
    while(x < arr.length - 3) {
        arr2[x+3] = arr[x+0];
        arr2[x+2] = arr[x+3];
        arr2[x+1] = arr[x+2];
        arr2[x+0] = arr[x+1];
        x +=4;
    }
    
    while(x < arr.length) {
        arr2[x] = arr[x];
        x++;
    }
    
    intx=0;
    而(x
    谢谢!但是使用这段代码,我只会旋转完整的四个数组,而忽略数组的其余部分。那么,我如何找出最后四个数组之后有多少个元素,并将它们添加到新的arr2中呢?抱歉,忘记了最后一部分。我添加了它。我提供了两种解决方案,这取决于您是否需要另一个数组来修改现有的数组Ethan感谢您提供此代码片段,它可能会提供一些有限的短期帮助。通过说明为什么这是一个很好的问题解决方案,正确解释其长期价值,并将使其对未来有其他类似问题的读者更有用。请在您的回答中添加一些解释,包括您所做的假设。确定吗添加了说明,但已接受另一个答案:)
    int x = 0;
    
    while(x < arr.length - 3) {
        arr2[x+3] = arr[x+0];
        arr2[x+2] = arr[x+3];
        arr2[x+1] = arr[x+2];
        arr2[x+0] = arr[x+1];
        x +=4;
    }
    
    while(x < arr.length) {
        arr2[x] = arr[x];
        x++;
    }