为什么元素不会被交换
public static void SwapArray(int[,] arr)
{
for (int i = 0; i < arr.GetLength(0); i++)
{
for (int j = 0; j < arr.GetLength(0); j++)
{
int temp = arr[i, j];
arr[i, j] = arr[j, i];
arr[j, i] = temp;
}
}
}
即使参数没有ref修饰符,数组也不会改变。 引用的副本作为参数传递给对象?
答案 0 :(得分:21)
您的算法存在错误。对于每个i和j,您的循环会交换arr[i,j]
和arr[j,i]
两次。
例如,对于i = 3,j = 1,arr[3,1]
与arr[1,3]
交换一次,对于i = 1,j = 3。结果是原始矩阵。您应该将j循环更改为
for (int j = 0; j < i; j++)
答案 1 :(得分:4)
第二个arr.GetLength(0)
应为arr.GetLength(1)
。因为你想使用第二维。
答案 2 :(得分:1)
引用的副本是作为参数传递的吗?
通过引用传递数组。
SwapArray(ref int[,] arr)
在这里,您通过引用传递引用(对不起,对于重言式),这意味着您甚至可以重新分配引用:
arr = new int [10,20];
答案 3 :(得分:1)
试试这个。
我已经更改了第二个for循环。 你实际上交换并再次重新开始。所以,你站在原地。
public static void SwapArray(int[,] arr)
{
for (int i = 0; i < arr.GetLength(0); i++)
{
for (int j = i+1; j < arr.GetLength(0); j++)
{
int temp = arr[i, j];
arr[i, j] = arr[j, i];
arr[j, i] = temp;
}
}
}