黑马程序员技术交流社区

标题: 看了张老师的视屏,对于这个结果我表示不解 [打印本页]

作者: 宋美成    时间: 2014-4-24 00:18
标题: 看了张老师的视屏,对于这个结果我表示不解
本帖最后由 宋美成 于 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啊。。。求解答





作者: 郭珍    时间: 2014-4-24 00:52
add方法定义如下就好了:
public static int add(int a ,int...int ags){
    int sum=0;
    for(int i:ags){
     sum+=i;
    }
    return sum;
}
作者: 程序爱好者    时间: 2014-4-24 00:57
       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;
        }
作者: Tking    时间: 2014-4-24 04:32
你知道为啥不?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)
解决根本问题
作者: 诺忔。初禾、    时间: 2014-4-24 09:01
ags不包括a ,你理解一下,就像定义了int a,和int【】ags
作者: jzxyhjl    时间: 2014-4-24 09:31
  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. }
复制代码

这里用数组做参数的方式,把你的方法又写了一遍,你对比着看一下就会明白了。需要注意的是:这个方法是完全相同的而不是重载。




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