数组或者list的时候,用下面的代码交换值,如果s[i]=s[j](比如说s[i]=4,s[j]=4),那么最后s[i]和s[j]交换之后,得到的值都是0. 为什么呢?希望热心人详细回答
代码如下:
public void Swap(List<int> s, int i, int j) { //但s[i]=s[j]的时候交换的值不对。。 s[j] = s[i] + s[j]; s[i] = s[j] - s[i]; s[j] = s[j] - s[i]; //int temp = s[j]; //s[j] = s[i]; //s[i] = temp; }
你是说s[i]=s[j]还是s[i]==s[j]呢?如果是后者,你的代码只有当i==j才会变为0。比如:
s为{1,2,2,4},假设i为1,j为2,此时
1、s[i]==s[j] ,s[j] =s[i]+s[j] 即 s[j]=2+2;
2、s[i]==s[j] ,s[i] =s[j]-s[i] 即 s[i]=4-2;
3、s[i]==s[j] ,s[j] =s[j]-s[i] 即 s[j]=4-2;
交换成功。
当i==j,比如i为1,j为1,此时
1、s[i]==s[j] ,s[j] =s[i]+s[j] 即 s[j]=2+2;
2、s[i]==s[j] ,s[i] =s[j]-s[i] 即 s[i]=4-4;
3、s[i]==s[j] ,s[j] =s[j]-s[i] 即 s[j]=0-0;
就变为0了。
s[i]=s[j]的意思是当他们的值相等的时候,比如说s[i]=4,s[j]=4
@四龙须: s[i]和s[j]相等是没有问题的,可以交换成功。i等于j才会出现0。
哦,谢谢了,确实是当i==j的时候出现的,我还以为永远都不会有i==j的情况呢。
谢谢了
@四龙须: 不客气。^_^
搞清楚 引用类型内存分布
当s[i]=s[j]时应该没有问题,但i=j应该有问题