黑马程序员技术交流社区

标题: 为什么结果不是最小值 [打印本页]

作者: 徐传任    时间: 2012-9-23 21:34
标题: 为什么结果不是最小值
        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-9-23 21:39
你的方法中定义
max=0;
min=0;
拿它们和数组中的数字做比较,但是数组中没有比0小的数,最后当然min还是等于0了。
初始化max和min时可以把它们都定义为numbers[0]
作者: 王杨武    时间: 2012-9-23 21:53
你看看这个 修改一下。看还有没有错

未命名.jpg (35.67 KB, 下载次数: 42)

未命名.jpg

作者: 李阳Leo    时间: 2012-9-23 22:16
要善用VS的调试,一步一步的跳,就知道问题出在哪了

在这个算法中,max和min的初值应该赋为数组中的第一个数,我想你的本意也是这样的,比较出这个数组中的最大和最小值,和0根本就没有关系。

改成这样
  1. max = numbers[0];
  2. min = numbers[0];
复制代码
这样第一次比较的时候max和min都是数组中的第一个值,所以可以从第二个开始比较,把 i 改成 1,这样就从下标为1的元素开始比较
  1. for (int i = 1; i < numbers.Length; i++)
复制代码
最后就能正常输出 numbers 数组中最大和最小值
作者: 刘欢(安阳)    时间: 2012-9-25 17:31
呵呵,因为你的数组里没有比0小的元素了,如果数组中的元素都是负数,你的程序也输不出最大值而是输出0。      我建议把数组里第一个元素赋值给max和min,可以再试试




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