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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 樊其杰 中级黑马   /  2013-3-22 23:35  /  1803 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public class VrableParameter {

  2.         /**
  3.          * @param args
  4.          */
  5.         public static void main(String[] args) {
  6.                 // TODO Auto-generated method stub
  7.                 System.out.println(add(2, 3));

  8.         }
  9.        
  10.         public static int add(int x,int ... args){
  11.                 int sum=x;
  12.                 for(int i=0;i<args.length;i++)
  13.                         sum+=args[i];
  14.                 return sum;
  15.         }
  16. }
复制代码
刚开始张老师打的是sum=0;后来一个同学说错了,又改成sum=x;哪里错了?我怎么觉得是sum=0对的?

点评

记得及时处理帖子哦,继续追问,或将分类改成【已解决】,谢谢  发表于 2013-3-23 18:52

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

6 个回复

倒序浏览
可变参数:适用于参数个数不确定,类型确定的情况,java把可变参数当做数组处理。注意:可变参数必须位于最后一项。当可变参数个数多余一个时,必将有一个不是最后一项,所以只支持有一个可变参数。因为参数个数不定,所以当其后边还有相同类型参数时,java无法区分传入的参数属于前一个可变参数还是后边的参数,所以只能让可变参数位于最后一项。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
的确是开始的sum=0写错了
首先你看一下add函数的目的是什么?是把所有传进的参数相加求和的对不对。
而第一个型参不就是x吗,是零就错了
回复 使用道具 举报
楼上说的一点不错,举个例子调用方法输入两个参数10和0:add(10,0)。如果sum=0那结果是0+0=0了;所以sum的值要是第一个形参传进来的值

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
不管是什么具体值,是什么都是传给型参,用的着去关心具体值是什么吗?关心的话也是谁调用这个函数谁去给型参赋值,赋什么值就随便了

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
我发现public static int add(int x,int ... args)这种写法不合理,按这种写法,args[0]会是数组的第二个数,那么这样要有正确结果,就必须让sum=x;如果写成public static int add(int x,int y,int  ... args),那这时候args[0]会从数组的第三位开始取,那么sum的初始值就必须是sum=x+y;我认为最合理的写法应该是public static int add(int ... args);这样可以让sum=0;这样更符合可变参数的方便性。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
张昶 中级黑马 2013-3-23 16:00:10
7#
支持楼上的说法,举得例子也好!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马