黑马程序员技术交流社区

标题: java中boolean型函数的返回值问题 [打印本页]

作者: 吴文龙    时间: 2013-7-4 04:48
标题: java中boolean型函数的返回值问题
本帖最后由 杜光 于 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啊 想不通
作者: Freedom1    时间: 2013-7-4 05:17
person (int age)
         {
       this.name=name;
     }
这地方错了吧?
作者: 谢威    时间: 2013-7-4 08:30

  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. }
复制代码
测试通过。
作者: HM张博文    时间: 2013-7-4 09:26
person (int age)
        {
      this.name=name;
    }
参数是age,怎么里面的内容是name呢?改下就好了
作者: xuluheng718    时间: 2013-7-4 09:39
楼主,首先你的题是个我很简单的误笔:
你的构造函数在初始化的时候把年龄作为名字储存了。
person (int age)
        {
      this.name=name;//问题出现在这里
    }

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

我们编程的时候很大部分的时间是在调试,处理BUG。一个良好的处理BUG方式会让自己写程序的效率提升很多。
作者: 小石头39910    时间: 2013-7-4 10:13
显然是你太激动了么,一下把构造函数的参数传错了

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


作者: 吴文龙    时间: 2013-7-4 10:53
郑先明 发表于 2013-7-4 10:34
看了楼主的代码,作为一个正在努力学习的人,我也想提个问题,
请问, 对于楼主的这个代码,是这样理解的吗?
pe ...

是这么理解的

作者: 郑先明    时间: 2013-7-4 11:47
吴文龙 发表于 2013-7-4 10:53
是这么理解的

谢谢~万恶的十字................




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