黑马程序员技术交流社区

标题: 方法问题 [打印本页]

作者: 张松    时间: 2013-8-17 22:13
标题: 方法问题
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赋值。

作者: hourglass    时间: 2013-8-17 23:25
因为当你传入的数组nums的长度为0时, for里面的内容将不会执行, 也就是说max和min没有被赋值, 而对于声明out的变量, 在方法结束时,必须对其进行初始化,所以VS会报错。 你可以将out改为ref, 或在执行for之前, 对max和min进行初始化。
作者: 小天    时间: 2013-8-18 00:39
        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:42
本帖最后由 §風過無痕§ 于 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:}

作者: EYE_SEE_YOU    时间: 2013-8-18 22:37
大家都好努力哦
作者: 瞎猫馒头米田共    时间: 2013-8-20 14:33
int[] 不传值的时候是一个数组长度为零的数组。这时候 你 的max min就都为空,自然报错
作者: 张松    时间: 2013-8-20 15:22
可以说得再明白点吗

作者: 天涯浪子    时间: 2013-8-26 17:50
我怎么觉得你那段代码 里面if完全没用上呢?max= nums[0] 你就永远给max=num[0]的值勒啊 你那2段if是拿来做什么的?去掉也不会影响任何代码的 也不会影响sum的结果啊 我看迷糊勒?
作者: 天涯浪子    时间: 2013-8-26 17:54
§風過無痕§ 发表于 2013-8-18 00:42
亲  这是我更改过的代码   请再测试一遍看看呵呵~~~不好意思    调试了15分钟发出来的时候才发现已经有马友 ...

啊 崩溃 那段IF代码 真的 真的有用? 我怎么怎么看都觉得没用啊{:soso_e118:}
作者: hourglass    时间: 2013-8-27 10:41
本帖最后由 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..确实比较好, 可以省去一次判断。








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