黑马程序员技术交流社区

标题: 关于可变参数的小程序 [打印本页]

作者: 乔九    时间: 2013-2-21 17:21
标题: 关于可变参数的小程序
package cn.itcast.day1;

public class VarableParameter {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                add(2,4,5);

        }
        public static void add(int a,int ... args)
        {
                        int sum=0;
                for(int i=0;i<args.length;i++)
                {
                       
                        sum=sum+args[i];
                       
                }
                System.out.println(sum);
        }

}打印结果怎么是9啊?
作者: 寇弘禄    时间: 2013-2-21 17:25
只是把后连个数赋给了可变参数args,2赋给了a,sum只是加了可变参数里面的数,没有加a
作者: 黑马刘杰    时间: 2013-2-21 17:27
  1. public static void add(int a,int ... args)
  2.         {
  3. //这里应该是a
  4.                  int sum=a;
  5.                 for(int i=0;i<args.length;i++)
  6.                 {
  7.                         
  8.                         sum=sum+args[i];
  9.                         
  10.                 }
  11.                 System.out.println(sum);
  12.         }
复制代码

作者: 胥文    时间: 2013-2-21 17:28
public static void add(int a,int ... args)
该方法中,第一个为形参为整数,第二个形参为int型的数组,而方法的主体是求数组里面各个元素的和,而int整数没有用到,所以结果就是数组中元素相加即4+5=9;
作者: 江华    时间: 2013-2-21 17:28
本帖最后由 江华 于 2013-2-21 17:40 编辑

从结果分析问题:
1、立场:
    计算机加减乘除肯定不会计算错误
    结果是9说明,它相加的值就是9.
2、根据结果分析
     传入参数:    2,4,5
    预期结果:11
    实际结果:9
   从而可以发现,计算机可以能只相加了:4,5,没有加第一个参数。
3、根据发现的现象,来分析代码
  1. public static void add( int a,int ... args)
  2.         {
  3.                 int sum=0;
  4.                 for(int i=0;i<args.length;i++)
  5.                 {
  6.                         sum=sum+args[i];
  7.                 }
  8.                 System.out.println(sum);
  9.         }
复制代码
发现类add 接收参数列表是,int 类型变量  a和int 类型不定长度数组变量args
所以,我们在出入参数的时候,第一个参数赋值给了a,第二个参数才赋值给了数组的0脚标。
--------
问题出现在这个代码
  1.      public static void add(int a,int ... args)  
复制代码
你应该修改为
  1.     public static void add(int ... args)  
复制代码
或者 是
  1. public static void add( int a,int ... args)
  2.         {
  3.                 int sum=a;
  4.                 for(int i=0;i<args.length;i++)
  5.                 {
  6.                         sum=sum+args[i];
  7.                 }
  8.                 System.out.println(sum);
  9.         }
复制代码
就可以了


作者: 江华    时间: 2013-2-21 17:41
原来是我的沙发,只是修改一下排版,结果沙发被抢了。。。。。




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