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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王桂丽 中级黑马   /  2012-7-23 11:24  /  2561 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王桂丽 于 2012-7-23 11:59 编辑

/*
   需求:描述人的年龄
   思路与步骤:1、定义一个类类名为Person
      2、在Person类中定义私有的age属性,并提供访问方法
      3、在主函数中新建一个Person对象,并用p接收
      4、在主函数中调用Setage方法,并赋符合if条件的值30,查看结果
      5、在主函数中调用Setage方法,并赋不符合if条件的值-30,查看结果

*/
class PersonDemo
{
public static void main(String[] args)
{
  Person p=new Person();
  
  
  p.Setage(30);//在主函数中调用Setage方法,并赋符合if条件的值30,查看结果
  p.Setage(-30);//在主函数中调用Setage方法,并赋不符合if条件的值-30,查看结果
  
}
}
class Person
{
    private int age;//定义私有的age属性
public void Setage(int a)//提供访问age的方法
{
  if(age>0&&age<130)
  { age=a;
   speak();//调用speak方法
  }
  else
  System.out.println("非法年龄");
  
}
public int Getage()
  {
  return age;//返回age的值
  }
private void speak()
  {
  System.out.println("age="+age);
  }
}

运行结果是:

[img]file:///C:/Documents%20and%20Settings/Administrator/Application%20Data/Tencent/Users/2531988876/QQ/WinTemp/RichOle/$W}D{3R2O6[BITV1_6EUAF6.jpg[/img]

疑问:1、为什么输入年龄为30时,运行结果是“非法年龄”?是因为if语句没执行到吗?为什么没执行到?
           2、Setage函数中必须得写returnage的语句吗?
           3、为什么有时Getage函数中没有写“return age”语句,是个空函数,编译时会提示在Setage函数内缺少返回语句?是因   为  函   数名中有get吗?还是说不管函数名是什么,编译时都会提示缺少返回语句?是否都会提示范围(即在第几行缺少返回值)?
               

未命名.jpg (6.62 KB, 下载次数: 44)

未命名.jpg

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

11 个回复

正序浏览
嗯 我知道  ,另外  规范的get和set写法: get/set+字段名(字段首字母大写)如: getAge/setAge
回复 使用道具 举报
孙建飞 发表于 2012-7-23 11:57
疑问:1、为什么输入年龄为30时,运行结果是“非法年龄”?是因为if语句没执行到吗?为什么没执行到?
     ...

写错了,是Setage里的Getage函数!
回复 使用道具 举报
孙建飞 发表于 2012-7-23 11:48
class Person
{
    private int age;//定义私有的age属性

喔,明白了!
回复 使用道具 举报
芦曦 发表于 2012-7-23 11:46

运行已经出结果了!
回复 使用道具 举报
疑问:1、为什么输入年龄为30时,运行结果是“非法年龄”?是因为if语句没执行到吗?为什么没执行到?
            答:上面已经回答
           2、Setage函数中必须得写returnage的语句吗?
              答:因为Setage函数是void类型,所以不用写return age语句;
           3、为什么有时Setage函数中没有写“return age”语句,是个空函数,编译时会提示在Setage函数内缺少返回语句?是因   为  函   数名中有get吗?还是说不管函数名是什么,编译时都会提示缺少返回语句?是否都会提示范围(即在第几行缺少返回值)?
            函数的返回值与函数名没有任何关系,与返回类型有关系,当一个函数的返回类型是void时就不用写返回值,而当一个函数的返回类型为其他类型时则必须写返回值。
              

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
class Person
{
    private int age;//定义私有的age属性
public void Setage(int a)//提供访问age的方法
{
  if(age>0&&age<130)    //你在这里判断age是否大于0和小于130,但是你这里还没有给age赋值。
  { age=a;                     //把这句话移动到if判断语句前面就行了。
   speak();//调用speak方法
  }
  else
  System.out.println("非法年龄");
  
}
public int Getage()
  {
  return age;//返回age的值
  }
private void speak()
  {
  System.out.println("age="+age);
  }
}

回复 使用道具 举报
本帖最后由 芦曦 于 2012-7-23 11:49 编辑
  1. class PersonDemo
  2. {
  3. public static void main(String[] args)
  4. {
  5.    Person p=new Person();
  6.    
  7.    
  8.    p.Setage(30);//在主函数中调用Setage方法,并赋符合if条件的值30,查看结果
  9.    p.Setage(-30);//在主函数中调用Setage方法,并赋不符合if条件的值-30,查看结果
  10.    
  11. }
  12. }
  13. class Person
  14. {
  15.      private int age;
  16. public void Setage(int a)//<font color="red">你这里定义的是a</font>
  17. {
  18.    if(a>0&&a<130)//<font color="red">你这里出错了,if语句不应该判断age的范围,因为你传入的是a的值所以应该判断a的值,再把a赋予给age.我已经帮你改过来了,你运行下!!</font>
  19.    { age=a;
  20.     speak();//调用speak方法
  21.    }
  22.    else
  23.    System.out.println("非法年龄");
  24.    
  25. }
  26. public int Getage()
  27.    {
  28.    return age;//返回age的值
  29.    }
  30. private void speak()
  31.    {
  32.    System.out.println("age="+age);
  33.    }
  34. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
在Setage()函数中,你需要判断形参a是否满足条件,而不是判断age
回复 使用道具 举报
class Person
{
    private int age;//定义私有的age属性
public void Setage(int a)//提供访问age的方法
{
  if(age>0&&age<130)
  { age=a;
   speak();//调用speak方法
  }
  else
  System.out.println("非法年龄");   这里的if语句判断出错了,如果结果出现的是非法年龄的话说明你的if语句判断出错了 在判断age的时候应该先把那个形式参数传递给实际参数
回复 使用道具 举报
  1. private int age;//定义私有的age属性
  2.                 public void Setage(int a)//提供访问age的方法
  3.                 {
  4.                   if(age>0&&age<130)//这里出错,你判断的是age的范围,而age你还没赋值,肯定不符合。
  5.                                                           //正确的,应该是if(a>0&&a<130).....
  6.                   { age=a;
  7.                    speak();//调用speak方法
  8.                   }
  9.                
复制代码
回复 使用道具 举报
你的if应该判断的是传入的a,你判断age当然不会有结果了;age你都没有初始化;
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马