黑马程序员技术交流社区

标题: 求助,为什么不出现想要的结果 [打印本页]

作者: bdw9005    时间: 2015-9-10 07:12
标题: 求助,为什么不出现想要的结果
一个人可以吃不同的食物,只要吃东西就会增加体重0.6,如果 要是出门遛弯,每走100,体重减0.2,小于100步忽略不计。 请用面向对象思想实现。
思路;
类名:Person
属性:年龄(_age)、体重(_weight)
动作:吃饭(eat)方法、散步(walk)方法
  1. #import<Foundation/Foundation.h>
  2. @interface Person : NSObject {
  3.     @public
  4.     int _age;////数据类型  _实例变量名
  5.     float _weight;
  6. }
  7. -(float) eat:(int)x ;//有参方法的声明
  8. -(float) walk:(int)x;
  9. @end
  10. @implementation Person
  11. //方法名 eat:
  12. - (float) eat:(int)x{
  13.     //只要吃东西就会增加体重0.6,
  14.     _weight+=0.6*x;
  15.         return _weight;
  16.     }
  17. //方法名 walk:
  18.     -(float)walk:(int)x{
  19.         //每走100步,体重减0.2,小于100步忽略不计。
  20.         if(x>100)_weight-=0.2*x;
  21.         return _weight;
  22.             
  23.     }

  24. @end



  25. int main(){
  26.     @autoreleasepool {
  27.         //创建对象
  28.         Person *person= [Person new];
  29.         //对象访问实例变量
  30.         person->_weight=100;
  31.         //调用有参的方法
  32.         int eatWeight=[person eat:1];
  33.         int walkWeight=[person walk:2];
  34.         NSLog(@"eatWeight=%f,walkWeight=%f",eatWeight,walkWeight);
  35.     }
  36.     return 0;
  37. }
复制代码

   

作者: lixj1991    时间: 2015-9-10 13:47
第20行。
        if(x>100)_weight-=0.2*x;
是不是想说
        _weight-=0.2*x/100;
因为是每走100步才体重减少0.2的。
再有_weight由于是float型,是不是初始化的时候写100.0更好一点。
作者: 翟宇浩    时间: 2015-9-10 14:17
楼上说的是对的, _weight-=0.2*x/100;
初始化 _weight 是,由于是 float 类型,所以 person->_weight=100.0f;
int walkWeight=[person walk:200];
作者: tangbinbin    时间: 2015-9-10 17:44
写的太复杂了感觉,你的返回值和参数类型有点问题,float类型的只后面加f。


#import <Foundation/Foundation.h>


//类的声明
@interface Person : NSObject{

    @public

    //属性
    int _age;
    float _weight;
   


}

-(void)eat:(NSString*) foodName;
-(void)walk:(int) num;

@end

//类的实现
@implementation Person

-(void)eat:(NSString*) foodName{
   
    _weight+=0.6f;
    NSLog(@"人吃了%@,当前体重:%.2f",foodName,_weight);


}
-(void)walk:(int) num{

    _weight-=num/100*0.2;
    NSLog(@"人走了%d,当前体重:%.2f",num,_weight);


}

@end



    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            // 创建对象
            Person *person=[Person new];
            person->_age=18;
            person->_weight=55;
            
            [person eat:@"红烧狮子头"];
            [person walk:280];
        }
        return 0;
    }

作者: bustle    时间: 2015-9-10 18:44
很好,很漂亮的代码。感觉不需要返回值啊。
作者: bdw9005    时间: 2015-9-10 19:15
lixj1991 发表于 2015-9-10 13:47
第20行。
        if(x>100)_weight-=0.2*x;
是不是想说

很感谢,20行忘记了除以100,而且还有36和37行的代码应为float类型
作者: bdw9005    时间: 2015-9-10 19:19
本帖最后由 bdw9005 于 2015-9-10 19:34 编辑
翟宇浩 发表于 2015-9-10 14:17
楼上说的是对的, _weight-=0.2*x/100;
初始化 _weight 是,由于是 float 类型,所以 person->_weight=100. ...


很感谢,20行忘记了除以100,而且还有36和37行的eatWeight以及walkWeight应为float类型
作者: bdw9005    时间: 2015-9-10 19:22
翟宇浩 发表于 2015-9-10 14:17
楼上说的是对的, _weight-=0.2*x/100;
初始化 _weight 是,由于是 float 类型,所以 person->_weight=100. ...

20行忘记了除以100,而且还有36和37行的eatWeight以及walkWeight应为float类型是这些地方出问题的,太感谢了
作者: bdw9005    时间: 2015-9-10 19:37
tangbinbin 发表于 2015-9-10 17:44
写的太复杂了感觉,你的返回值和参数类型有点问题,float类型的只后面加f。

很感谢,20行忘记了除以100,而且还有36和37行的eatWeight以及walkWeight应为float类型,我也感觉有点冗余的感觉,不过现阶段还没达到那种写简单的功力
作者: bdw9005    时间: 2015-9-10 19:38
bustle 发表于 2015-9-10 18:44
很好,很漂亮的代码。感觉不需要返回值啊。

果然不需要返回值




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