Java 如何交换数组中的两个元素?

Java 如何交换数组中的两个元素?,java,arrays,Java,Arrays,我试图解决的问题如下:- 给定一个整数长度为3的数组,返回一个元素“向左旋转”的数组,因此{1,2,3}产生{2,3,1} 我想出了以下代码:- public int[] rotateLeft3(int[] nums) { for(int i=0;i<2;i++) swap(nums[i],nums[i+1]); return nums; } public void swap(int a,int b) { int temp = a; a = b; b= temp; }

我试图解决的问题如下:-

给定一个整数长度为3的数组,返回一个元素“向左旋转”的数组,因此{1,2,3}产生{2,3,1}

我想出了以下代码:-

public int[] rotateLeft3(int[] nums) {
  for(int i=0;i<2;i++)
   swap(nums[i],nums[i+1]);
  return nums;
}

public void swap(int a,int b)
{
 int temp = a;
 a = b;
 b= temp;
}

但这段代码完全是暴力写作,我不太喜欢它。您能建议我如何使第一种方法工作吗?

java方法调用中的所有参数都是按值传递的。您需要传入数组和要交换的两个索引

public void swap(int[] array, int a,int b)
{
 int temp = array[a];
 array[a] = array[b];
 array[b]= temp;
}

java方法调用中的所有参数都是按值传递的。您需要传入数组和要交换的两个索引

public void swap(int[] array, int a,int b)
{
 int temp = array[a];
 array[a] = array[b];
 array[b]= temp;
}

正如您所说的问题是通过引用传递的,C做了,Java没有。不过,还有很多其他方法可以达到同样的目的


最简单的方法是将数组和两个索引传递给swap函数,而不是在该索引处传递数组的内容。

正如您所说的问题是通过引用传递的,C会传递,Java不会。不过,还有很多其他方法可以达到同样的目的


最简单的方法是将数组和两个索引传递给swap函数,而不是传递该索引处数组的内容。

如果希望旋转不受大小限制,请尝试:

public int[] rotateLeft(int[] nums){
  if(nums.length == 0)
    return new int[0];

  int temp = nums[0];
  //This loop starts at index 1 because we are moving
  //    elements left, and 0 can't move left.
  for(int index = 1; index < nums.length; index++){
    nums[index-1] = nums[index];
  }

  nums[nums.length-1] = temp;
}
public int[]rotateLeft(int[]nums){
如果(nums.length==0)
返回新整数[0];
int temp=nums[0];
//这个循环从索引1开始,因为我们正在移动
//元素向左移动,0不能向左移动。
对于(int index=1;index
如果希望旋转不受大小限制,请尝试:

public int[] rotateLeft(int[] nums){
  if(nums.length == 0)
    return new int[0];

  int temp = nums[0];
  //This loop starts at index 1 because we are moving
  //    elements left, and 0 can't move left.
  for(int index = 1; index < nums.length; index++){
    nums[index-1] = nums[index];
  }

  nums[nums.length-1] = temp;
}
public int[]rotateLeft(int[]nums){
如果(nums.length==0)
返回新整数[0];
int temp=nums[0];
//这个循环从索引1开始,因为我们正在移动
//元素向左移动,0不能向左移动。
对于(int index=1;index
您也可以在不使用
temp
变量的情况下使用xor交换;)


您也可以在不使用
temp
变量的情况下使用异或交换;)


当调用swap方法时,您正在数组中传递值,但该方法不返回a和b值。是的,这可以通过使用指针在C/C++中实现,但java没有


Xynariz的代码提供了一种不受数组大小限制的移位方法。

当调用swap方法时,您在数组中传递值,但该方法不返回a和b值。是的,这可以通过使用指针在C/C++中实现,但java没有


Xynariz的代码提供了一种不受数组大小限制的移位方法。

您可以使用单行使用模式创建交换函数,但调用格式并不典型:

public int[] rotateLeft3(int[] nums) {
  for(int i=0;i<2;i++)
    nums[i+1] = swap(nums[i], nums[i]=nums[i+1]);
  return nums;
}

// swaps any number of same type objects
public <T> T swap(T... args) {
  // usage: z = swap(a, a=b, b=c, ... y=z);
  return args[0];
}
public int[]rotateLeft3(int[]nums){

对于(int i=0;i您可以使用单行使用模式创建交换函数,但调用格式不典型:

public int[] rotateLeft3(int[] nums) {
  for(int i=0;i<2;i++)
    nums[i+1] = swap(nums[i], nums[i]=nums[i+1]);
  return nums;
}

// swaps any number of same type objects
public <T> T swap(T... args) {
  // usage: z = swap(a, a=b, b=c, ... y=z);
  return args[0];
}
public int[]rotateLeft3(int[]nums){
对于(inti=0;iIt)来说,这和插入排序中使用的逻辑(元素移位)是一样的。我也可以用这个。这和插入排序中使用的逻辑(元素移位)是一样的。我也可以用这个。