Java 将数组中的所有元素向左旋转;k";位置,但我的代码将其向右移动

Java 将数组中的所有元素向左旋转;k";位置,但我的代码将其向右移动,java,arrays,Java,Arrays,有人能告诉我如何修复这段代码,而不是把数组移到右边,我该如何让它移到左边?有人能给我解释一下吗 public class Test { public static void main(String[] args) { int[] b = {10, 20, 30, 40, 50, 60}; System.out.println("\n///// Rotate Left k cell example \n////"); b = copyArray(a, a.length)

有人能告诉我如何修复这段代码,而不是把数组移到右边,我该如何让它移到左边?有人能给我解释一下吗

public class Test {
  public static void main(String[] args) {
    int[] b = {10, 20, 30, 40, 50, 60};
    System.out.println("\n///// Rotate Left k cell example \n////");
    b = copyArray(a, a.length); 
    b = rotateLeft(b,4); //assuming k = 4
    printArray(b); // This Should Print: { 50, 60, 10, 20, 30, 40 };
  }

  // Rotates all the elements of the source array to the right by 'k' positions
  // Returns the updated array
  public static int[] rotateLeft(int[] source, int k) {
    int[] arr = copyArray(source,source.length); //copies all source to a new array
    int[] temp = new int[arr.length];

    for (int i = 0; i < arr.length; i++){
      temp[(i + k) % arr.length] = arr[i];
    }

    for (int i = 0; i < arr.length; i++){
      arr[i] = temp[i];
    }

    return arr; 
  }
}
公共类测试{
公共静态void main(字符串[]args){
int[]b={10,20,30,40,50,60};
System.out.println(“\n///Rotate Left k cell example\n//”;
b=复制阵列(a,a.长度);
b=rotateLeft(b,4);//假设k=4
printary(b);//应该打印:{50,60,10,20,30,40};
}
//将源数组的所有元素向右旋转“k”个位置
//返回更新后的数组
公共静态int[]rotateLeft(int[]源,int k){
int[]arr=copyArray(source,source.length);//将所有源复制到新数组
int[]temp=新int[arr.length];
对于(int i=0;i
因此,该代码将元素旋转到右侧。我应该如何修改它以使其向左旋转?
我得到的输出:

{30,40,50,60,10,20}

但我期望的结果是:

{50,60,10,20,30,40}


我认为您可以更改填充
temp
数组的赋值逻辑。更改此行:

temp[(i + k) % arr.length] = arr[i];
为此:

temp[i] = arr[(i + k) % arr.length];
这里的逻辑是
temp[]
中的
ith
条目将等于
k
arr[]
中位于其前面的条目。换句话说,
temp[]
将包含由
k
向左移动的原始元素。请注意,您仍然需要mod操作来确保索引环绕数组的大小

完整代码:

public static int [] rotateLeft(int [] source, int k){
    int arr[] = copyArray(source, source.length);
    int[] temp = new int[arr.length];
    for (int i=0; i<arr.length; i++) {
        temp[i] = arr[(i + k) % arr.length];
    }
    for (int i=0; i<arr.length; i++) {
        arr[i] = temp[i];
    }

    return arr; 
}
公共静态int[]rotateLeft(int[]源,int k){
int arr[]=copyArray(source,source.length);
int[]temp=新int[arr.length];

对于(int i=0;i我认为您可以更改填充
temp
数组的赋值逻辑。更改此行:

temp[(i + k) % arr.length] = arr[i];
为此:

temp[i] = arr[(i + k) % arr.length];
这里的逻辑是
temp[]
中的
第i个
条目将等于
k
arr[]
中位于其前面的条目。换句话说,
temp[]
将包含由
k
向左移动的原始元素。请注意,您仍然需要mod操作以确保索引环绕数组的大小

完整代码:

public static int [] rotateLeft(int [] source, int k){
    int arr[] = copyArray(source, source.length);
    int[] temp = new int[arr.length];
    for (int i=0; i<arr.length; i++) {
        temp[i] = arr[(i + k) % arr.length];
    }
    for (int i=0; i<arr.length; i++) {
        arr[i] = temp[i];
    }

    return arr; 
}
公共静态int[]rotateLeft(int[]源,int k){
int arr[]=copyArray(source,source.length);
int[]temp=新int[arr.length];
对于(inti=0;i基本上是做
(i-k)
而不是
(i+k)
。除此之外,删除
copyArray
调用和第二个循环。由于java中的
%
操作符的行为与它的行为相同,因此在实际
%
对它进行操作之前,您必须将
源代码.length
添加到
(i-k)

public static int [] rotateLeft(int [] source, int k) {
    int arr[] = new int[source.length];

    for (int i = 0; i < arr.length; i++){
        arr[(i - k + source.length) % source.length] = source[i];
    }

    return arr; 
}
公共静态int[]rotateLeft(int[]源,int k){
int arr[]=new int[source.length];
对于(int i=0;i
输出

50
60
10
20
30
四十

基本上是执行
(i-k)
而不是
(i+k)
。除此之外,删除
copyArray
调用和第二个循环。由于java中的
%
运算符的行为与它的行为相同,因此在实际
%
对其执行
(i-k)
操作之前,您必须将
source.length
添加到
(i-k)

public static int [] rotateLeft(int [] source, int k) {
    int arr[] = new int[source.length];

    for (int i = 0; i < arr.length; i++){
        arr[(i - k + source.length) % source.length] = source[i];
    }

    return arr; 
}
公共静态int[]rotateLeft(int[]源,int k){
int arr[]=new int[source.length];
对于(int i=0;i
输出

50
60
10
20
30
四十