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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 宋美成 于 2014-4-24 10:19 编辑
  1. public class tes
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 System.out.println(add(1,2,3));
  6.                
  7.         }
  8.         public static int add(int a,int... ags)
  9.         
  10.         {
  11.                 int sum=0;
  12.                 for (int i=0;i<ags.length;i++)
  13.                 sum+=ags[i];
  14.                 return sum;
  15.         }
  16. }
复制代码


输出的结果怎么会是5呢?for循环里是从ags[0]开始加的啊,为什么第一个参数会被漏加?是我理解的有问题吗,答案应该是6啊。。。求解答




评分

参与人数 1技术分 +1 收起 理由
Silent_memory + 1 很给力!

查看全部评分

5 个回复

倒序浏览
add方法定义如下就好了:
public static int add(int a ,int...int ags){
    int sum=0;
    for(int i:ags){
     sum+=i;
    }
    return sum;
}
回复 使用道具 举报
       public static void main(String[] args)
        {
                System.out.println(add(1,2,3));
               
        }
        public static int add(int a,int... ags)  //   int... ags  才是可变参数  前面的int a是不在可变参数内,
                                                           //  所以输 出结果不会计算第一个数和。
        
        {
                int sum=0;
                for (int i=0;i<ags.length;i++)
                sum+=ags;
                return sum;
        }
回复 使用道具 举报
你知道为啥不?add里设定了两个参数一个int ,一个数组,你传1,2,3 ,1被当做a传入,2,3被当做数组传入
解决方案1;
在return的前面加一句
sum+=a;
可以解决,治标不治本,代码不好看
解决方案2;
将public static int add(int a,int ... ags)
改成 public static int add(int ... ags)
解决根本问题

评分

参与人数 1技术分 +1 收起 理由
Silent_memory + 1 很给力!

查看全部评分

回复 使用道具 举报 1 0
ags不包括a ,你理解一下,就像定义了int a,和int【】ags
回复 使用道具 举报
  1. package test;

  2. public class ArgsTest {

  3.         public static void main(String[] args) {
  4.                 //两个方法输出结果一致
  5.                 int a = argsTest(1,2,3);
  6.                 System.out.println("可变参数方法:"+a);
  7.                
  8.                 int b = arrTest(1,new int[]{2,3});
  9.                 System.out.println("数组方法"+b);
  10.                
  11.         }
  12.         //可变参数
  13.         public static int argsTest(int a, int...args){
  14.                
  15.                 int sum = 0;
  16.                 //args是可变参数,但是该方法的第一个参数a不在args中,所以args[0]从2开始
  17.                 //a=1 args={2,3}
  18.                 for(int i=0;i<args.length;i++){
  19.                         sum += args[i];
  20.                 }
  21.                 return sum;
  22.         }
  23.         //该方法同上边的argsTest()方法,唯一不同的是可变参数在这里被替换成了数组
  24.         public static int arrTest(int a, int[] arr){
  25.                 int sum = 0;
  26.                 //这里可以一目了然的区分,两个参数
  27.                 //a=1 arr={2,3}
  28.                 for(int i=0;i<arr.length;i++){
  29.                         sum += arr[i];
  30.                 }
  31.                 return sum;
  32.         }
  33. }
复制代码

这里用数组做参数的方式,把你的方法又写了一遍,你对比着看一下就会明白了。需要注意的是:这个方法是完全相同的而不是重载。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马