黑马程序员技术交流社区
标题:
看了张老师的视屏,对于这个结果我表示不解
[打印本页]
作者:
宋美成
时间:
2014-4-24 00:18
标题:
看了张老师的视屏,对于这个结果我表示不解
本帖最后由 宋美成 于 2014-4-24 10:19 编辑
public class tes
{
public static void main(String[] args)
{
System.out.println(add(1,2,3));
}
public static int add(int a,int... ags)
{
int sum=0;
for (int i=0;i<ags.length;i++)
sum+=ags[i];
return sum;
}
}
复制代码
输出的结果怎么会是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
package test;
public class ArgsTest {
public static void main(String[] args) {
//两个方法输出结果一致
int a = argsTest(1,2,3);
System.out.println("可变参数方法:"+a);
int b = arrTest(1,new int[]{2,3});
System.out.println("数组方法"+b);
}
//可变参数
public static int argsTest(int a, int...args){
int sum = 0;
//args是可变参数,但是该方法的第一个参数a不在args中,所以args[0]从2开始
//a=1 args={2,3}
for(int i=0;i<args.length;i++){
sum += args[i];
}
return sum;
}
//该方法同上边的argsTest()方法,唯一不同的是可变参数在这里被替换成了数组
public static int arrTest(int a, int[] arr){
int sum = 0;
//这里可以一目了然的区分,两个参数
//a=1 arr={2,3}
for(int i=0;i<arr.length;i++){
sum += arr[i];
}
return sum;
}
}
复制代码
这里用数组做参数的方式,把你的方法又写了一遍,你对比着看一下就会明白了。需要注意的是:这个方法是完全相同的而不是重载。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2