黑马程序员技术交流社区
标题:
关于数组
[打印本页]
作者:
焦晨光
时间:
2012-7-18 20:43
标题:
关于数组
本帖最后由 焦晨光 于 2012-7-19 08:29 编辑
先看程序:
public class VarArgsDemo{
public static void main(Staring[] args){
printMax(34,3,3,2,56.5);
printMax(new double[]{1,2,3});
}
public static void printMax(double...numbers){
if(numbers==0){
system.out.println("No argument passed");
return;
}
double result = numbers[0];
for(int i = 1;i<number.length;i++)
if(numbers
>result)
result = numbers
;
system.out.println("The max value is" + result);
}
}
很纠结:
我想知道printMax(34,3,3,2,56.5);语句 在调用printMax方法时 发生了什么?
public static void printMax(double...numbers)这条语句 到底是什么意思?
作者:
康大玮
时间:
2012-7-18 20:51
本帖最后由 康大玮 于 2012-7-18 20:53 编辑
public class VarArgsDemo{
public static void main(String[] args){
printMax(34,3,3,2,56.5);
printMax(new double[]{1,2,3});
}
public static void printMax(double...numbers){
if(numbers.length==0){
System.out.println("No argument passed");
return;
}
double result = numbers[0];
for(int i = 1;i<numbers.length;i++)
if(numbers
>result)
result = numbers
;
System.out.println("The max value is" + result);
}
}
你的代码有几处错误
public static void printMax(double...numbers)
这里用到了可变参数
可变参数。其实就是一种数组参数的简写形式。
不用每一次都手动的建立数组对象。
只要将要操作的元素作为参数传递即可。
隐式将这些参数封装成了数组。
作者:
黑马-王言龙
时间:
2012-7-18 21:07
/*
* 更正你的代码
* */
public class Demo2 {
public static void main(String[] args) {
printMax();
//将你传入的数据,先转换为double,再存入一个double类型的数组中。若有不能转的数据,则会报错。
printMax('a',34, 3.0, 2, 6.5);
//传入的若为数组,则将数组引用numbers指向你传的数组对象。
printMax(new double[] { 1, 2, 3 });
}
public static void printMax(double... numbers) {
if (numbers.length == 0) { //这里是判断数组是否为空,即有没有传入数据
System.out.println("No argument passed"); //若没有数据打印这句
return; //方法结束
}
double result = numbers[0];
for (int i = 1; i < numbers.length; i++) { //遍历数组,即传入的数据
if (numbers[i] > result) {
result = numbers[i]; //用变量result记录下最大值
}
}
System.out.println("The max value is" + result); //打印最大值
}
}
/*打印结果为:
No argument passed
The max value is97.0
The max value is3.0*/
复制代码
作者:
马州州
时间:
2012-7-18 21:11
本帖最后由 马州州 于 2012-7-18 21:14 编辑
楼主代码有一些错误,我先给你改了一下
public class VarArgsDemo
{
public static void main(String[] args)
{
printMax(34,3,3,2,56.5);
printMax(new double[]{1,2,3});
}
public static void printMax(double...numbers)
{
if(numbers.length==0)
{
System.out.println("No argument passed");
return;
}
double result = numbers[0];//result是角标0的值,用角标0去比较角标1
for(int i = 1;i<numbers.length;i++)//这里的循环是执行下面的if语句
if(numbers[i]>result)//比较角标1和角标0的值
result = numbers[i];//如果角标1大于角标0,那么就把角标1的赋给result
System.out.println("The max value is" + result);
}
}
复制代码
我想知道printMax(34,3,3,2,56.5);语句 在调用printMax方法时 发生了什么?
你这个程序是输出数组的最大值的,用到再调用printMax的时候,首先double result = numbers[0];
result是角标0的值,用角标0去比较角标1,如果角标1的值大,就把角标1的赋给角标result,然后for循环,x++了,这时x就等于2了,用result的值去跟角标2的值比较,一次类推
最后就得出最大的值了
public static void printMax(double...numbers)这条语句 到底是什么意思?
这个是数组参数的简写形式,不用每次手动的建立数组,很容易理解的,就是不用每次都去定义一个数组
作者:
刘真
时间:
2012-7-18 21:13
首先先解释一下public static void printMax(double...numbers){}
1.JDK5允许把类型相同但个数不定的参数传递给方法
2.形参声明发法:类型名称...参数名称
3.java把这个变长的参数作为数组处理,相当于长度不定的数组numbers[]相当于
public static void printMax(double[] numbers){}
我想知道printMax(34,3,3,2,56.5);语句 在调用printMax方法时 发生了什么?
if(numbers==0){
system.out.println("No argument passed");
return;
先判断是否有参数?没有则返回该函数,什么都不做。显然有五个参数,接着执行下面代码
double result = numbers[0];
//把第一个参数赋给result
for(int i = 1;i<number.length;i++)
//for循环找出最大的参数并将其打印出来
if(numbers
>result)
result = numbers
;
system.out.println("The max value is" + result);
作者:
黑马罗坚
时间:
2012-7-18 21:39
printMax(1,2,3);
printMax(new double[]{1,2,3});
这2个在书写上有区别实际效果没区别 地一行 你执行时 jdk会自动帮你把1,2,3打包成double数组在传给调用者
地2行 因为高版本的运行低版本编译的程序 而1.5以下没有可变参数 为了兼容1.5版本以下的版本 如果形成是基本类型的数组的话 那么你的实参是该类型的数组的会JDK不会帮你打包直接把该数组传给调用者
所以对于形参是可变参数的方法 传过来的始终是一个数组 如果形成是泛型可变参数如T。。。t 那么传过来的对象则必须是一个引用类型数组 如果实参是引用类型数组的话就不会被自动打包直接传给该方法 如果不是引用类型数组的话如基本类型数组 和不是数组的类型 则会被系统打包成该类型的数组在传给该方法 如形参是1,2,3打包成integer的数组传过去 形参是1,'2' 打包成Object的数组传过去 int[] 打包成int的2维数组传过去即int[][] int[] 是一个引用类型 int[][]则是一个引用类型数组 “f",String[] 则打包成Object传过去
如果形参不是泛型和Object的话 则实参只要是数组则就直接传过去不是数组的打包成数组传过去 如果形成是Object的可变参数的话 那么实参除非是单独的一个Object数组 否则都发被打包了在传过去
当你有了一个可变参数的方法时如果参数是泛型的可变参数 那么重载方法的形参就不能是Object[] o 如果形参不是泛型的话 那么重载形式就不能有形参为该可变参数元素类型的数组存在
这一特性也为我们反射方法参数为泛型和可变参数的方法成为可能 如果方法的参数是泛型那么 反射该方法是参数为Object 如果参数为泛型数组 则反射时则为Object[] 如果形参为可变参数 那么反射时参数则为该类型的数组则可 如果是泛型可变参数则反射参数则是Object的数组
作者:
杨康
时间:
2012-7-18 21:43
public static void printMax(double...numbers)这里用了可变参数来传递参数。
调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式,
printMax(34,3,3,2,56.5)等同于编译器帮你创建了一个double数组 double[] d = {34,3,3,2,56.5},
剩下就代码内容就是比较元素大小并赋值的操作了。
作者:
全海波
时间:
2012-7-18 21:45
/*
再此前你的代码出错颇多,而且不规范,我已将其更正,虽更正了,但还是保留了部分的原有数据
希望以后,将代码尽量规范化
*/
public class VarArgsDemo
{
public static void main(String[] args)
{
printMax();//无参函数
printMax(34.1,3.2,3.5,2.4,56.5);//这句话做的事情是:将这系列数字存放到数组名为numbers的数组中
printMax(new double[]{1,2,3});//将数组对象的引用传给numbers
}
public static void printMax(double...numbers)//这句话的做的事情:将该系列的数存入double类型的数组中
{
//判断数组是否为空
if(numbers.length==0)
{
System.out.println("No argument passed");//如果为空,则执行这句话
return;//结束该函数,返回主函数执行下一条语句
}
double result = numbers[0];//定义个变量并初始化
for(int i = 1;i<numbers.length;i++)//遍历数组
{
if(numbers[i]>result)
result = numbers[i];
}
System.out.println("The max value is = " + result);
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2