黑马程序员技术交流社区

标题: 关于函数的一点问题 [打印本页]

作者: 王桂丽    时间: 2012-7-23 11:24
标题: 关于函数的一点问题
本帖最后由 王桂丽 于 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, 下载次数: 67)

未命名.jpg

作者: 梁小波    时间: 2012-7-23 11:27
你的if应该判断的是传入的a,你判断age当然不会有结果了;age你都没有初始化;
作者: 李东升    时间: 2012-7-23 11:30
  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.                
复制代码

作者: 王贵朝    时间: 2012-7-23 11:34
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的时候应该先把那个形式参数传递给实际参数
作者: 乞文超    时间: 2012-7-23 11:38
在Setage()函数中,你需要判断形参a是否满足条件,而不是判断age

作者: 芦曦    时间: 2012-7-23 11:46
本帖最后由 芦曦 于 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. }
复制代码

作者: 孙建飞    时间: 2012-7-23 11:48
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:57
疑问:1、为什么输入年龄为30时,运行结果是“非法年龄”?是因为if语句没执行到吗?为什么没执行到?
            答:上面已经回答
           2、Setage函数中必须得写returnage的语句吗?
              答:因为Setage函数是void类型,所以不用写return age语句;
           3、为什么有时Setage函数中没有写“return age”语句,是个空函数,编译时会提示在Setage函数内缺少返回语句?是因   为  函   数名中有get吗?还是说不管函数名是什么,编译时都会提示缺少返回语句?是否都会提示范围(即在第几行缺少返回值)?
            函数的返回值与函数名没有任何关系,与返回类型有关系,当一个函数的返回类型是void时就不用写返回值,而当一个函数的返回类型为其他类型时则必须写返回值。
              


作者: 王桂丽    时间: 2012-7-23 12:03
芦曦 发表于 2012-7-23 11:46

运行已经出结果了!
作者: 王桂丽    时间: 2012-7-23 12:03
孙建飞 发表于 2012-7-23 11:48
class Person
{
    private int age;//定义私有的age属性

喔,明白了!
作者: 王桂丽    时间: 2012-7-23 12:04
孙建飞 发表于 2012-7-23 11:57
疑问:1、为什么输入年龄为30时,运行结果是“非法年龄”?是因为if语句没执行到吗?为什么没执行到?
     ...

写错了,是Setage里的Getage函数!
作者: 孙建飞    时间: 2012-7-23 12:09
嗯 我知道  ,另外  规范的get和set写法: get/set+字段名(字段首字母大写)如: getAge/setAge




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