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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 肖云 中级黑马   /  2012-5-24 01:09  /  2184 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 肖云 于 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;
        }

评分

参与人数 1技术分 +2 收起 理由
郑文 + 2

查看全部评分

6 个回复

倒序浏览
在变量定义当中就出现了问题,声明一个变量min,但是没有必要对其赋值,你的min=0就说明最小值为0,
if (numbers[i] < min)
            {
            min=numbers[i];
            }
在if语句执行过程当中,没有哪个numbers[i]的值会比min小,所以最后结果出现了"0",而不是想要的"1"

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

回复 使用道具 举报
我昨天看视频也正好看到这方面,这应该是关于方法的OUT参数吧!你的min一开始已经赋了一个0,所以在比较的时候numbers[i] < min 就是用numbers[i] 和0比较  只要你的数组里没有负数,任何数都比min大 所以if下面的语句就不会执行了 所以输出的min就为0!

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

回复 使用道具 举报
哪怎么解决这个问题呢???
回复 使用道具 举报
你错误的原因楼上也说了
具体修改为:
Compute方法中min和max的初始值该成numbers[0]
也就是
min=numbers[0];
max=numbers[0];
这样就行了
回复 使用道具 举报
多谢楼上的               
回复 使用道具 举报
肖云 发表于 2012-5-24 17:39
多谢楼上的

你是在哪里学的啊播客还是黑马
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马