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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴文龙 中级黑马   /  2013-7-4 04:48  /  3426 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杜光 于 2013-7-4 10:27 编辑

class person
{
   private int age;
   private  String name;
   person (int age)
        {
      this.name=name;
    }
   person(int age,String name)
  {
      this.name=name;
          this.age=age;
   }
   public void run()
  {
     System.out.println("姓名:"+name+ "年龄:"+age);
   }
   public boolean compare(person p)
   {
     return this.age==p.age;
   }
}
class  persondemo1
{
        public static void main(String[] args)
        {
            person p1=new person(89);
            person p2=new person(21);
                boolean b=p1.compare(p2);
                System.out.println(b);
        }
}
为什么返回值一直都是true啊 想不通

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1 用elicps快捷键生成构造方法就不会那么容易.

查看全部评分

10 个回复

倒序浏览
person (int age)
         {
       this.name=name;
     }
这地方错了吧?

评分

参与人数 1黑马币 +3 收起 理由
杨兴庭 + 3

查看全部评分

回复 使用道具 举报

  1. class person
  2. {
  3.    private int age;
  4.    private  String name;
  5.    person (int age)
  6.    {
  7.            //this.name=name;   这里错误,改成下面即可
  8.       this.age=age;
  9.     }
  10.    person(int age,String name)
  11.   {
  12.       this.name=name;
  13.           this.age=age;
  14.    }
  15.    public void run()
  16.   {
  17.      System.out.println("姓名:"+name+ "年龄:"+age);
  18.    }
  19.    public boolean compare(person p)
  20.    {
  21.      return this.age==p.age;
  22.    }
  23. }
  24. class  persondemo
  25. {
  26.         public static void main(String[] args)
  27.         {
  28.             person p1=new person(89);
  29.             person p2=new person(21);
  30.             boolean b=p1.compare(p2);
  31.             System.out.println(b);
  32.         }
  33. }
复制代码
测试通过。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
person (int age)
        {
      this.name=name;
    }
参数是age,怎么里面的内容是name呢?改下就好了

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
楼主,首先你的题是个我很简单的误笔:
你的构造函数在初始化的时候把年龄作为名字储存了。
person (int age)
        {
      this.name=name;//问题出现在这里
    }

这里我把我是如何解决一般问题的方法:
一,程序编译错误。这是个很麻烦的错误,可能是标点符号、括号、写错单词、一些API需要处理异常而忘记处理了、还有就是语法错误。一般这些错误只要编码的时候严谨 一点,完全可以避免。
二,运行时错误。这很大部分都是空指针异常和数组越界之类的,这是靠经验积累出来的,JVM每报一次异常把这些异常单词记下来,日积月累,对于出现的异常就可以做到一目了然,不要轻易的放过这些异常,这对于以后处理BUG的效率会有很大的提升。
三,编译和运行没问题,但是结果不是自己期望的。这就是逻辑上的错误了,这时候我一般的处理方式都是主函数开始找出错的代码,然后进入出错的方法,然后进入方法内部的变量,是否对数据的操作上出了问题。这类问题相比其它问题要难处理的多,这时候就要重新整理下自己的思维了,逐一剖析把思维用图的方式体现出来,习惯的画图有助于更清晰的理解问题的所在,其实这也是一种面向对象的思维方式。

我们编程的时候很大部分的时间是在调试,处理BUG。一个良好的处理BUG方式会让自己写程序的效率提升很多。

点评

当局者迷,旁观者清啊 你们随便一看就知道了 我还纠结了半天  发表于 2013-7-4 10:54
回复 使用道具 举报
显然是你太激动了么,一下把构造函数的参数传错了

class person
{
   private int age;
   private  String name;
   person (int age)
   {//亲改成这样就欧了
            this.age=age;
    }
   person(int age,String name)
  {
      this.name=name;
          this.age=age;
   }
   public void run()
  {
     System.out.println("姓名:"+name+ "年龄:"+age);
   }
   public boolean compare(person p)
   {
     return this.age==p.age;
   }
}
class  persondemo
{
        public static void main(String[] args)
        {
            person p1=new person(89);
            person p2=new person(21);
            boolean b=p1.compare(p2);
            System.out.println(b);
        }
}


点评

我错了  发表于 2013-7-4 10:53

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
看了楼主的代码,作为一个正在努力学习的人,我也想提个问题,
请问, 对于楼主的这个代码,是这样理解的吗?
person在堆内存中创建了p1,p2两个对象,并给p1传值89,p2传值21,而p1调用了compare()方法,而类类型变量p2传值进compare(),所以return语句左边p.age等于21,右边被this对象调用,也就是p1,所以等于89,然后输出false

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
郑先明 发表于 2013-7-4 10:34
看了楼主的代码,作为一个正在努力学习的人,我也想提个问题,
请问, 对于楼主的这个代码,是这样理解的吗?
pe ...

是这么理解的
回复 使用道具 举报

谢谢~万恶的十字................
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马