首页 新闻 会员 周边

数组和list交换值不对

0
悬赏园豆:5 [已解决问题] 解决于 2012-11-23 18:03

数组或者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;
        }
C#
四龙须的主页 四龙须 | 初学一级 | 园豆:172
提问于:2012-11-23 10:14
< >
分享
最佳答案
0

你是说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了。

收获园豆:5
johnMing | 菜鸟二级 |园豆:223 | 2012-11-23 17:45

s[i]=s[j]的意思是当他们的值相等的时候,比如说s[i]=4,s[j]=4

四龙须 | 园豆:172 (初学一级) | 2012-11-23 17:53

@四龙须: s[i]和s[j]相等是没有问题的,可以交换成功。i等于j才会出现0。

johnMing | 园豆:223 (菜鸟二级) | 2012-11-23 18:00

哦,谢谢了,确实是当i==j的时候出现的,我还以为永远都不会有i==j的情况呢。

谢谢了

四龙须 | 园豆:172 (初学一级) | 2012-11-23 18:03

@四龙须: 不客气。^_^

johnMing | 园豆:223 (菜鸟二级) | 2012-11-23 18:08
其他回答(2)
0

搞清楚 引用类型内存分布

Qlin | 园豆:2403 (老鸟四级) | 2012-11-23 11:05
0
当s[i]=s[j]时应该没有问题,但i=j应该有问题
卒子 | 园豆:588 (小虾三级) | 2012-11-23 17:37
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册