黑马程序员技术交流社区

标题: 基础问题 [打印本页]

作者: 骆龙    时间: 2012-2-24 22:18
标题: 基础问题
class Overloading
{
        public static void main(String[] args)
        {
                int x=sum(5,6);
                int y=sum1(1,2,3);
                System.out.println(x,y);
        }

        public static int sum(int x,int y)
        {
                return x+y;
        }

        public static int sum1(int x,int y,int z)
        {
                return x+y+z;
        }
}
运行后 显示 错误 实际参数和形式参数长度不同 是什么意思
不是都定义了 int 整型么 ?
作者: 张一凡    时间: 2012-2-24 22:53
本帖最后由 张一凡 于 2012-2-24 22:55 编辑

主函数里的System.out.println(x,y);格式写错了, System.out.println(x+","+y);这样就没问题了。
还有你的类名是写的重载,为什么不用重载呢?
我帮你把代码优化下:
  1. class Overloading
  2. {
  3.          public static void main(String[] args)
  4.          {
  5.                  int x=sum(5,6);
  6.                  int y=sum(1,2,3);
  7.                  System.out.println("x="+x+",y="+y);
  8.          }

  9.         public static int sum(int x,int y)
  10.          {
  11.                  return x+y;
  12.          }

  13.         public static int sum(int x,int y,int z)
  14.          {
  15.                  return sum(x,y)+z;
  16.          }
  17. }
复制代码
当然输出语句也可以封装下。
作者: 骆龙    时间: 2012-2-24 23:13
张一凡 发表于 2012-2-24 22:53
主函数里的System.out.println(x,y);格式写错了, System.out.println(x+","+y);这样就没问题了。
还有你的 ...

就是想问 形式参数和实际参数长度不同 这句话怎么理解,不都是int么
知道错误了 但不知道为什么是这个错误提示
作者: H07000223    时间: 2012-2-24 23:17
本帖最后由 H07000223 于 2012-2-24 23:21 编辑

System.out.println(x,y);没这种语法。

System.out.println方法只接受一个参数,(x,y)这是传入了两个类型的参数,你可以把他们整合成一个参数。也可以打印两遍。

System.out.println(x+" "+ y);或者System.out.println(x);
                                                     System.out.println(y);


形式参数和实际参数长度不同理解就是:人家只要一个,你非要塞两个(形式上只需要一个,实际上却塞了两个,不合适啊!)


作者: 马胜平    时间: 2012-2-24 23:25
函数定义:形式参数就一个,你硬要传两个所以形式参数和实际参数长度不同,懂了没1=2吗 懂?
作者: 张一凡    时间: 2012-2-24 23:41
super_ln 发表于 2012-2-24 23:13
就是想问 形式参数和实际参数长度不同 这句话怎么理解,不都是int么
知道错误了 但不知道为什么是这个错 ...

你这段代码我编译了下,除了那个输出语句写错了外,其他的没什么问题。
而你说的,形参和实参长度不同,应该是传递的参数个数有所不同。
作者: 许圣建    时间: 2012-2-25 17:36
我们经常会见到一个词语叫,参数列表,到底参数在内存中是怎么样存在的,
虽然我还没有学到相关的知识,但我想应该是这样:
一个非空参函数被加载后,他会被分配一个空间来存放参数的对象,这些参数的对象又要属于一个叫做参数列表的对象,
那么这个参数列表看起来就像是一个数组,但是参数可能不是同一类的,有int有char还可能有其他类的引用...他们一个个向下排列,
肯定是有长度的,就像数组的角标越界错误一样,长度的错误显然是jvm会自动检查的。
知识欠缺,这只是我的猜测和理解。
作者: 杨盼    时间: 2012-2-25 20:54
System.out.println(x,y);
这是传入了两个参数,System.out.println()这个最多只能传入一个参数,System.out.print()必须传入一个参数
作者: a504079589    时间: 2012-2-25 23:05
System.out.println(x+y);  这样就行了!




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