黑马程序员技术交流社区

标题: 为什么我写的方法不能得到最小值 [打印本页]

作者: 肖云    时间: 2012-5-24 01:09
标题: 为什么我写的方法不能得到最小值
本帖最后由 肖云 于 2012-5-24 17:42 编辑

下面是我写的一个方法,但运行后最小值为0,而不是1,谁帮我分析一下:
        static void Main(string[] args)
        {
            int[] nums = { 2,3,4,1,6,5};
            int sum, max, min;
            sum = Compute(nums, out max, out min);
            Console.WriteLine("数组的和为:{0}  最大值为:{1}  最小值为:{2}",sum,max,min);
            Console.ReadKey();
        }

        //写一个方法,返回和,最大值,最小值
        public static int Compute(int[] numbers,out int max,out int min)
        {
            int sum = 0;
            max=0;
            min=0;
            for (int i = 0; i < numbers.Length; i++)
            {
            sum+=numbers;
            if (numbers > max)
            {
            max=numbers;
            }
            if (numbers < min)
            {
            min=numbers;
            }

            }
            return sum;
        }

作者: 魏庆君    时间: 2012-5-24 03:30
在变量定义当中就出现了问题,声明一个变量min,但是没有必要对其赋值,你的min=0就说明最小值为0,
if (numbers[i] < min)
            {
            min=numbers[i];
            }
在if语句执行过程当中,没有哪个numbers[i]的值会比min小,所以最后结果出现了"0",而不是想要的"1"
作者: 董超    时间: 2012-5-24 10:17
我昨天看视频也正好看到这方面,这应该是关于方法的OUT参数吧!你的min一开始已经赋了一个0,所以在比较的时候numbers[i] < min 就是用numbers[i] 和0比较  只要你的数组里没有负数,任何数都比min大 所以if下面的语句就不会执行了 所以输出的min就为0!
作者: 肖云    时间: 2012-5-24 13:14
哪怎么解决这个问题呢???
作者: 牛景亮    时间: 2012-5-24 16:39
你错误的原因楼上也说了
具体修改为:
Compute方法中min和max的初始值该成numbers[0]
也就是
min=numbers[0];
max=numbers[0];
这样就行了
作者: 肖云    时间: 2012-5-24 17:39
多谢楼上的               
作者: 王国文    时间: 2012-5-27 23:51
肖云 发表于 2012-5-24 17:39
多谢楼上的

你是在哪里学的啊播客还是黑马




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