A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 林嘉健 中级黑马   /  2013-1-16 20:56  /  1946 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 林嘉健 于 2013-1-17 12:21 编辑
  1. static void Main(string[] args)
  2.         {
  3.             int[] a = { 1, 2, 3, 4, 5 };
  4.             ReverseArray(a);
  5.             Console.ReadKey();
  6.         }
  7.         public static void ReverseArray(int[] a)
  8.         {
  9.             for (int i = 0; i < a.Length; i++)
  10.             {
  11.                 int temp = a[a.Length - 1 - i];
  12.                 a[a.Length - 1 - i] = a[i];
  13.                 a[i] = temp;
  14.             }
  15.             foreach (int temp in a)
  16.             {
  17.                 Console.WriteLine(temp);
  18.             }
  19.         }
复制代码
代码如上 怎么实现不了呢

评分

参与人数 1技术分 +1 收起 理由
邓艳秋 + 1

查看全部评分

6 个回复

倒序浏览
            for (int i = 0; i < a.Length; i++)

            {

                int temp = a[a.Length - 1 - i];

                a[a.Length - 1 - i] = a[i];

                a[i] = temp;

            }

这里的循环条件 经分析 有问题   比如数组有6个元素  你从 0 -5 开始遍历
0 和 5交换
1 和 4 交换
2 和 3交换
3 和 2交换
4 和 1交换
5和 0 交换

从头执行到结尾  其实经历了2次交换 反转了2次 所以没变  
只需要把循环条件 控制到   <=length/2 就可以了

评分

参与人数 1技术分 +1 收起 理由
邓艳秋 + 1

查看全部评分

回复 使用道具 举报
  • static void Main(string[] args)
  •         {
  •             int[] a = { 1, 2, 3, 4, 5 };
  •             ReverseArray(a);
  •             Console.ReadKey();
  •         }
  •         public static void ReverseArray(int[] a)
  •         {
                 int temp=0;
  •             for (int i = 0; i < a.Length; i++)
  •             {
  •                 temp = a[a.Length - 1 - i];
  •                 a[a.Length - 1 - i] = a;
  •                 a = temp;
  •             }
  •             foreach (int temp in a)
  •             {
  •                 Console.WriteLine(temp);
  •             }
  •         }
将temp 在for循环的外部声明,其实实现数组的反转,只有搞清楚数组的下角标的变化就很容易解决这种问题的,
还有就是通过第三变量进行两个数的交换,最后不要循环一次声明一次,在外面声明一次就可以了。

评分

参与人数 1技术分 +1 收起 理由
邓艳秋 + 1

查看全部评分

回复 使用道具 举报
直接画个图,就很清楚了


评分

参与人数 1技术分 +1 收起 理由
邓艳秋 + 1

查看全部评分

回复 使用道具 举报
其实这个问题调试一下,就可以知道,在交换的三行代码处添加断点,你这个数组很小,直接监视整个数组a也可以,观察数据变化,你会发现你的程序使数组翻转了两次,所以没有变化,学会调试很重要的,试试吧!!!

点评

授人以鱼不如授人以渔,值得学习。  发表于 2013-1-16 22:39

评分

参与人数 1技术分 +1 收起 理由
邓艳秋 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 王晨 于 2013-1-16 22:30 编辑

LZ的意思我没怎么理解,你的意思是将这个数组倒过来显示就行?那这很简单了
代码:
  1. static void Main(string[] args)
  2.         {
  3.       int[] a = { 1, 2, 3, 4, 5 };
  4.       for (int i = a.Length; i >0; i--)
  5.      {
  6.           Console.Write(a[i-1]);
  7.      }
  8.       Console.ReadKey();
  9.         }
复制代码
运行结果如图:


但是要将数组排序时(从大到小或者从小到大输出),可以使用 Array.Sort(),用法如下:
eg:
  1. static void Main(string[] args)
  2. {
  3.       int[] arry = new int[] { 20, 10, 84, 12, 8, 98, 14, 222, 3333 };
  4.           //将其从小到大进行排序,array.sort()用来将数组进行排序
  5.       Array.Sort(arry); //排序后,数组由小到大排列,所以第一个为最小值,最后一个为最大值。
  6.      Console.WriteLine("该数组最小数为" + arry[0]);//最小数为第一个值
  7.      Console.WriteLine("该数组最大数为" + arry[arry.Length - 1]);//最大值为最后一个数
  8.      Console.ReadKey();
复制代码

评分

参与人数 1技术分 +1 收起 理由
潘梦军 + 1

查看全部评分

回复 使用道具 举报
还有这么多方法啊。明天我好好看看
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马