Java 如何交换数组中的两个元素?
我试图解决的问题如下:- 给定一个整数长度为3的数组,返回一个元素“向左旋转”的数组,因此{1,2,3}产生{2,3,1} 我想出了以下代码:-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; }
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)来说,这和插入排序中使用的逻辑(元素移位)是一样的。我也可以用这个。这和插入排序中使用的逻辑(元素移位)是一样的。我也可以用这个。