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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张松 中级黑马   /  2013-8-17 22:13  /  2704 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public static int GetSum(int[] nums, out int max, out int min)
        {
            int sum = 0;         
            for (int i = 0; i < nums.Length; i++)
            {
                max = nums[0];
                min = nums[0];
                if (max <nums[i])
                {
                    max = nums[i];
                }
                if (min > nums[i])
                {
                    min = nums[i];
                }
                sum += nums[i];
            }
            return sum;
        }
谁能解释一下vs为何报错:控制离开当前方法之前必须对out参数max,min赋值。

9 个回复

倒序浏览
因为当你传入的数组nums的长度为0时, for里面的内容将不会执行, 也就是说max和min没有被赋值, 而对于声明out的变量, 在方法结束时,必须对其进行初始化,所以VS会报错。 你可以将out改为ref, 或在执行for之前, 对max和min进行初始化。

评分

参与人数 1技术分 +2 收起 理由
黑马-吕老师 + 2 新手赞一个

查看全部评分

回复 使用道具 举报
        public static int GetSum(int[] nums, out int max, out int min)
        {
            int sum = 0;
            max = nums[0];//对参数max赋值
            min = nums[0];//对参数min赋值
            for (int i = 0; i < nums.Length; i++)
            {
                if (max < nums[i])
                {
                    max = nums[i];
                }
                if (min > nums[i])
                {
                    min = nums[i];
                }
                sum += nums[i];
            }
            return sum;
        }
1.out和ref引用参数的相同点:都是通过引用传递参数给函数;
2.out和ref引用参数的不同点是:用ref引用传递参数,该参数必须经过初始化,并且不能在调用它的函数中初始化;用out引用传递参数,该参数要在调用它的函数中初始化
3.使用out引用多个参数来返回多个值,这允许方法任意地返回需要的值
4.如果一个方法使用ref引用参数,另一个方法使用out引用参数,则这两个相同方法名的函数不能重载,否则出现编译错误
回复 使用道具 举报
本帖最后由 §風過無痕§ 于 2013-8-18 00:46 编辑

亲  这是我更改过的代码   请再测试一遍看看
  1. public static int GetSum(int[] nums, out int max, out int min)
  2. {
  3.      int sum = 0;
  4.      //max = min = nums[0];
  5.      max = nums[0];
  6.      min = nums[0];
  7.      for (int i = 0; i < nums.Length; i++)
  8.      {
  9.           if (max < nums[i])
  10.           {
  11.                max = nums[i];
  12.           }
  13.          if (min > nums[i])
  14.          {
  15.               min = nums[i];
  16.          }
  17.          sum += nums[i];
  18.     }
  19.     return sum;
  20. }
复制代码
呵呵~~~不好意思    调试了15分钟发出来的时候才发现已经有马友在这15分钟内回答了  而且答的非常不错!{:soso_e179:}
回复 使用道具 举报
大家都好努力哦
回复 使用道具 举报
int[] 不传值的时候是一个数组长度为零的数组。这时候 你 的max min就都为空,自然报错

评分

参与人数 1技术分 +1 收起 理由
赵宗荣 + 1

查看全部评分

回复 使用道具 举报
张松 中级黑马 2013-8-20 15:22:55
7#
可以说得再明白点吗
回复 使用道具 举报
我怎么觉得你那段代码 里面if完全没用上呢?max= nums[0] 你就永远给max=num[0]的值勒啊 你那2段if是拿来做什么的?去掉也不会影响任何代码的 也不会影响sum的结果啊 我看迷糊勒?
回复 使用道具 举报
§風過無痕§ 发表于 2013-8-18 00:42
亲  这是我更改过的代码   请再测试一遍看看呵呵~~~不好意思    调试了15分钟发出来的时候才发现已经有马友 ...

啊 崩溃 那段IF代码 真的 真的有用? 我怎么怎么看都觉得没用啊{:soso_e118:}
回复 使用道具 举报
本帖最后由 hourglass 于 2013-8-27 10:43 编辑
天涯浪子 发表于 2013-8-26 17:50
我怎么觉得你那段代码 里面if完全没用上呢?max= nums[0] 你就永远给max=num[0]的值勒啊 你那2段if是拿来做 ...

就给一个最简单的例子,nums = new int[]{2, 1, 3};你把这个数组带入GetSum方法, 一步一步执行的试试。

不过这里用if..else..确实比较好, 可以省去一次判断。



回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马