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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 侯凯斌 中级黑马   /  2013-1-13 15:49  /  1772 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 侯凯斌 于 2013-2-18 11:48 编辑

  1. 1.        public static int add(int  ... args){
  2.                 int sum=0;
  3.                 for(int arg:args){
  4.                         sum+=arg;
  5.                 }
  6.                 return sum;
  7.         }
  8.              System.out.println(add(200,400,800));
  9.            结果:1400


  10. 2.         public static int add(int x,int  ... args){
  11.                 int sum=0;
  12.                 for(int arg:args){
  13.                         sum+=arg;
  14.                 }
  15.                 return sum;
  16.         }
  17.              System.out.println(add(200,400,800));
  18.            结果:1200.


  19. 3.    public static int add(int x,int y,int  ... args){
  20.                 int sum=0;
  21.                 for(int arg:args){
  22.                         sum+=arg;
  23.                 }
  24.                 return sum;
  25.         }
  26.              System.out.println(add(200,400,800));
  27.            结果:800.
复制代码
我是真闹不懂了,怎么
add(int x,int   ... args)就把200忽略了呢。求解

评分

参与人数 1技术分 +1 收起 理由
金鑫 + 1

查看全部评分

6 个回复

倒序浏览
因为 你for循环你的求和 只是求的 可变参数里的和  前面定义的intX 根本就没参加运行
回复 使用道具 举报
一、jdk1.5的新特性,可变参数,适用于参数个数不确定,类型确定的情况,java把可变参数当做数组处理。
二、格式:
methodName([argumentList], dataType...argumentName);
其中:
       argumentList——普通参数,可选项。
       dataType——数据类型或者类。自动转换成dataType代表的数组。
       ...——Java的操作符。表示0到多个。必须是3个点。
       argumentName——参数名。
       注意,可变参数必须在最后。
在你的程序中,第一个传入的是普通参数,不会把它装入数组中,可变参数必须在最后。
三、在编译期间,这个可变参数将被转换int数组形式,即:
int add(int[] args)
所以在读取里面的内容时可以按取数组的方式取出里面的值。

评分

参与人数 1技术分 +1 收起 理由
金鑫 + 1

查看全部评分

回复 使用道具 举报
因为最后一个参数int...args,才是可变参数,第2题中,输入参数后x的值是200,可变参数是400和800,add方法只有args参加了运算,x没有参加运算,所以sun=400+800
同样,第3题中,输入参数后,x的值是200,y的值是400,剩下的800才是赋值给可变参数的,因为add方法中x和y都没有参加运算,所以就忽略了,返回值sun=800
总结,在方法中输入参数是先赋值给前面的变量,剩下的都赋值给可变参数,可变参数是一个数组,还有一点就是可变参数必须是定义参数中的最后一个

评分

参与人数 1技术分 +1 收起 理由
舒远 + 1

查看全部评分

回复 使用道具 举报
很简单啊,  根据你的顺序来判断的.. 当你为int x 申请一个变量的时候, 系统就会在栈区里寻找与之对应的参数啊,  第一个, 你的参数是可变参数, 可变参数就是说, 你申请了这个变量, 但是,不知道具体有多少个, 于是.. 你输入的3个数, 系统判断他们都是可变参数, 然后 你循环的是可变参数啊,  所以 第一题3个都相加了.. 根据上面说的,  你申请了2个变量,  int x 占了一个位子,  可变参数占了一个位子,  所以呢,  在你输入的时候, 必须要有一个值给 int x ,然后可变参数可以多个,  接着你又循环了...  然后x 没参与计算..  接着答案出来,  第3个同上.. 你申请了3个变量, 总共有3个位子..  前2个 各占一个... 最后一个变量 就是可变参数..

评分

参与人数 1技术分 +1 收起 理由
舒远 + 1

查看全部评分

回复 使用道具 举报
int  ... args是无限数组形式,第二题add(200,400,800)其实就是x=200,args=后面的400和800,你方法里只遍历了args,所以结果是1200,第三题原因一样,你只遍历了args,x=200,y=400,args=800,所以结果是800.

点评

非常欣赏!再接再厉!  发表于 2013-1-14 09:19

评分

参与人数 1技术分 +1 收起 理由
舒远 + 1 赞一个!言简意赅!

查看全部评分

回复 使用道具 举报
在Java中使用可变参数:
java可变参数就是一个定义一个参数数组。这个数组与普通的数组定义时有所区别,在定义时是在函数的参数中用三点(...)后加数组名称。
例如:累加所有参数的和
public static int add(int...args){
int sum=0;
for(int i=0;i<args.length;i++){
sum+=args[i];
}
return sum;
}
还可以在参数数组前定义很多的固定格式的参数:
例如:第一个参数是字符串,第二个参数为单精度实娄,第三个为可变参数:字符数组
static void printArgs(String s,float f,char...args){
System.out.println("第一个参数"+s+"第二个参数"+f);
System.out.print("参数数组列表");
for(int i=0;i<args.length;i++){
System.out.print(args[i]+" ");
}
}
要点:可变参是必须定义在函数的最后一个参数,不能定义了可以参数后面还有其他固定格式的参数。
例如:demo(String s,int...args,char c) 是错误的
正确方法为:demo(String s,char c,int...args)
在使用可变参数的函数时,可变参数是不用输入也能调用函数的,而固定格式的参数必须输入才能调用函数。
例如:调用上面的函数 add();是正确的。
printArgs();是错误的。
最少输入前面个个固定参数才能调用函数printArgs,
正确调用:printArgs("pi=",3.14159265f,'a','b','c');
    printArgs("pi=",3.14159265f);
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马