黑马程序员技术交流社区

标题: 求大神给解释 [打印本页]

作者: 李超杰    时间: 2014-4-30 12:40
标题: 求大神给解释
本帖最后由 czwanglei 于 2014-6-7 09:28 编辑

  string[] ls = { "3", "a", "8", "haha" };
            for (int i = 0, j = ls.Length - 1; i < j; i++, j--)
            {
                string temp = "";
                temp = ls;
                ls = ls[j];
                ls[j] = temp;
            }
            for (int i = 0; i < ls.Length;i++ )
            {
                Console.WriteLine(ls);
            }
            Console.ReadLine();

对于翻转问题一直很迷,还有冒泡排序问题,求解释

作者: 李超杰    时间: 2014-4-30 12:43
   temp = ls[i];
   ls[i] = ls[j];
   ls[j] = temp;这个知道是什么意思 就是前面的for语句里面就不明白了
作者: 阿斌    时间: 2014-4-30 13:52
本帖最后由 阿斌 于 2014-4-30 13:54 编辑

        首先看for循环,初始化语句是int i = 0, j = ls.Length - 1。可以看出,i和j此时分别是ls数组中第1个字符串和最后一个字符串的索引。为下面进行的翻转操作做准备。
        第二看for循环的条件,i < j 。翻转其实就是将前后字符串的位置对调,对于一个长度为n的数组,要实现前后元素位置对调,只需要对调n/2次(如果n/2是小数,则将小数点后的数字抹去)。
        举个栗子,如果数组长度是6,那么需前后对调23次,其过程就是第“0”个元素跟第“5”个对调,第“1”个跟第“4”个对调,第“2”个跟第“3”个对调。(注意:第“0”个,第“5”个这里都是指数组的索引)
        回头看看for循环,初始化语句中 i 其实就是代表左边第“0”个元素,j 就是代表右边的第“5”个元素。随着 i 自增(i++)和 j 自减(j--),其实就是上面一段话中的“0”和“5”对调 -> 然后是“1”和“4”对调 -> 最后是“2”和“3”对调。你看左边的数是不是始终小于右边的数?所以循环条件也就是 i < j 了。
作者: continue     时间: 2014-4-30 13:59
如果先反转的话,你这个也没得什么错啊,其实冒泡也差不多,就不过是双层循环而已
作者: .net_交流    时间: 2014-5-7 10:14
这个要一步步结合数据看 最好可以用VS编译工具 一步步执行 感觉应该好理解点 刚开始都很迷惑的 坚持住
作者: 8点的太阳    时间: 2014-5-7 10:24
翻转把它想象成一个圈,转圈赋值,冒泡排序就形象的想象成泡泡越往上数值越大
作者: czwanglei    时间: 2014-6-5 19:07
当有人给你回复哦,请及时把帖子编辑为提问结束,这样版主才给你加技术分
作者: /fendou    时间: 2014-6-5 19:33
打开VS把上面的代码敲上。在for前面加个断点 !F10
作者: 马山闪    时间: 2014-6-7 08:44
其实你应该分开嵌套,这样看起来会更加只管好懂一些




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2