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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王飞 中级黑马   /  2012-7-16 15:10  /  1985 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王飞 于 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;
                 
        }
}

点评

public static int method(int a ,double[] b,int...args){......}  发表于 2012-7-16 16:14

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

6 个回复

倒序浏览
public static int method(int a ,double b,int...args){......}没加中括号!参数错误!
回复 使用道具 举报
  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)
参数不匹配,调用肯定报错
回复 使用道具 举报
  1. public static int method(int a ,double[] b,int...args)//参数错误,第二个参数传的是double数组类型,你写的是doule类型, 强制转换错误
复制代码

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

捕获.PNG
回复 使用道具 举报
本帖最后由 王宝康 于 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行的注释,我想加红色高亮,可是没显示。
复制代码

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

回复 使用道具 举报
我晕。。。哎,自己不细心。诸位谢了
把握我弄得哎。。。
回复 使用道具 举报
  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. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马