黑马程序员技术交流社区

标题: 可变参数---传入2个数组的问题 [打印本页]

作者: 王飞    时间: 2012-7-16 15:10
标题: 可变参数---传入2个数组的问题
本帖最后由 王飞 于 2012-7-16 16:11 编辑


public class aa {
        /*可变参数:
        1,只能出现在参数列表最后
        2,...位于变量类型和变量名之间
        3,调用可变参数方法时,编译器为该可变参数隐含的创建一个数组,在方法体中以数组的方式访问可变*/
        
        public static void main(String[] args) {
                 int[] a = new int[]{1,2,3};
                System.out.println(method2(a));
               
               
                double[] b = new double[3];
                //调用不了。为什么??????
                System.out.println(method(1,b ,3,4,5));  //第一个参数接受的是int类型变量,第二个参数接受的是double数组,第三个和后面的是可变参数

                  
        }
        
        //这个方法没有报错,那么请问在调用这个方法时传入相应的参数为什么不行?
        
        public static int method(int a ,double b,int...args)//------如果此处的第二个参数接收的是数组,第三个参数是可变参数,
        //那么,调用时给第一个参数传一个数字,第二个参数传一个数组,第三个参数任意传入一个或者多个

        {
                int sum = a;
                for(int x = 0; x<args.length;x++)
                {
                        sum += args[x];
                }
               
                return sum;
        }
        
        public static int method2(int[] args)
        {
         
                int sum = 0;
                for(int x = 0; x<args.length;x++)
                {
                        sum += args[x];
                        
                }
               
                return sum;
                 
        }
}

作者: 王海亮    时间: 2012-7-16 15:30
public static int method(int a ,double b,int...args){......}没加中括号!参数错误!
作者: 黑马振鹏    时间: 2012-7-16 15:30
  System.out.println(method(1,b ,3,4,5));  //第一个参数接受的是int类型变量,第二个参数接受的是double数组,第三个和后面的是可变参数
需要 method(int a, double b[ ], int . . . args)
但是你写的是:
public static int method(int a ,double b,int...args)
参数不匹配,调用肯定报错
作者: 黑马刘涛    时间: 2012-7-16 15:52
  1. public static int method(int a ,double[] b,int...args)//参数错误,第二个参数传的是double数组类型,你写的是doule类型, 强制转换错误
复制代码

捕获.PNG (31.02 KB, 下载次数: 41)

捕获.PNG

作者: 王宝康    时间: 2012-7-16 16:06
本帖最后由 王宝康 于 2012-7-16 16:08 编辑
  1. package common;

  2. public class Parameter {
  3.         /*可变参数:
  4.         1,只能出现在参数列表最后
  5.         2,...位于变量类型和变量名之间
  6.         3,调用可变参数方法时,编译器为该可变参数隐含的创建一个数组,在方法体中以数组的方式访问可变*/
  7.         
  8.         public static void main(String[] args) {
  9.                int[] a = new int[]{1,2,3};
  10.                System.out.println(method2(a));               
  11.                
  12.                double[] b = new double[3];
  13.                 //调用不了。为什么??????
  14.                System.out.println(method(1,b ,3,4,5));  //你的这儿的调用中,传入的参数是引用类型变量数组,java虚拟机会试图进行强制类型转换,不是一样的数据结构,不能转换。                          }         
  15.         //这个方法没有报错,那么请问在调用这个方法时传入相应的参数为什么不行?
  16.         
  17.         public static int method(int a ,double b,int...args)// 你的方法这儿定义的参数列表中第二个参数是double基本数据类型  
  18.                                                   //那么,调用时给第一个参数传一个数字,第二个参数传一个数组,第三个参数任意传入一个或者多个
  19.         {
  20.                 int sum = a;
  21.                 for(int x = 0; x<args.length;x++)
  22.                 {
  23.                      sum += args[x];
  24.                 }               
  25.                 return sum;
  26.         }
  27.         
  28.         public static int method2(int[] args)
  29.         {         
  30.                 int sum = 0;
  31.                 for(int x = 0; x<args.length;x++)
  32.                 {
  33.                         sum += args[x];                        
  34.                 }               
  35.                 return sum;                 
  36.         }
  37. }
  38. 看下第15行和第18行的注释,我想加红色高亮,可是没显示。
复制代码

作者: 王飞    时间: 2012-7-16 16:10
我晕。。。哎,自己不细心。诸位谢了
把握我弄得哎。。。
作者: 李东升    时间: 2012-7-16 16:17
  1. public static int method(int a ,double[] b,int...args)//这里的形参列表中,声明的是double,而不是double[],所以才会报错。,
  2. //那么,调用时给第一个参数传一个数字,第二个参数传一个数组,第三个参数任意传入一个或者多个
  3. {
  4.         int sum = a;
  5.         for(int x = 0; x<args.length;x++)
  6.         {
  7.                 sum += args[x];
  8.         }
  9.         
  10.         return sum;
  11. }
复制代码





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