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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马-李勇 中级黑马   /  2012-7-25 08:31  /  1562 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.lang.Math.*;
public class demo
{

        public static void main(String[] args)
        {
                System.out.println(add(2,5,4));
        }
        public static int add(int x,int ...args)
        {
        int sum=0;
        for(int i=0;i<args.length;i++)
                sum+=args[i];
        return sum;
        }
}
结果为什么是9,前面第一个参数为什么没有加进去?

7 个回复

倒序浏览
方法中,你的for循环循环累加的是args的每个元素,你根本没有用第一个参数
回复 使用道具 举报
我开始学的时候也碰到了这个问题。
public static int add(int x,int ...args)你传进去的可变参数nt ...args这个表述int类型的数组args,并不包括int x,
那么像想实现你的加法方法就简单了,只要把初始值sum初始值的赋值为x,就是把里面的所有的数都加起来了。
回复 使用道具 举报
由于可变参数中的可变数组args[]只是代表你为列出来的参数,这一点张老师在视频上也犯过这个错误,不过及时改了。
更改后的代码:
  1.         import java.lang.Math.*;
  2.         public class Test
  3.         {

  4.                 public static void main(String[] args)
  5.                 {
  6.                         System.out.println(add(2,5,4));
  7.                 }
  8.                 public static int add(int x,int ...args)
  9.                 {
  10.                 int sum=x;
  11.                 for(int i=0;i<args.length;i++)
  12.                         sum+=args[i];
  13.                 return sum;
  14.                 }
  15.         }
复制代码
运行结果:
回复 使用道具 举报
import java.lang.Math.*;
public class demo
{

        public static void main(String[] args)
        {
                System.out.println(add(2,5,4));
        }
        public static int add(int x,int ...args)//可变参数一定要定义在参数列表的最后面,你循环的是后面的数组参数args,而不是前面的变量x,所以你的结果是9        {
        int sum=0;
        for(int i=0;i<args.length;i++)
                sum+=args;
        return sum;
        }
}
回复 使用道具 举报
本帖最后由 郑正华 于 2012-7-25 09:50 编辑

对,add(2,5,4)中的2没有加进去,运行结果是9!
楼主的代码中 int x=2,args[]数组的长度是2,里面有5 ,4两个元素,即:args[]={5,4},    args[0]=5,  args[1]=4
当i = 0时,sum = sum + args[0],即sum = 0+5,
当i = 1时,sum = sum + args[1] , 即sum = 5+4
回复 使用道具 举报
李菁 中级黑马 2012-7-25 09:52:17
7#
public static int add(int x,int ...args)   int...args为动态参数,而x是一个单独的形参
        {
        int sum=0;
        for(int i=0;i<args.length;i++)   在这里循环args的每个元素
                sum+=args;  sum累加的只是args中的元素,而不包括形参x
        return sum;
        }

public static void main(String[] args)
        {
                System.out.println(add(2,5,4));   所以调用add方法时,是计算从第二位开始的,因为add方法只累加args中元素的值
        }
回复 使用道具 举报
哇,好多人回答啊,这个问题其实很简单,你的可变参数是从第二个int类型的数据开始的,当然不会加上第一个咯,以后要自己仔细分析,这样的小问题是最锻炼自己的,自己解决的多了,以后这样的小问题会出现的越来越少的。加油!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马