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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© TTsu 中级黑马   /  2015-9-10 01:19  /  1241 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*

设计一个”狗“类
1> 属性
* 颜色
* 速度(单位是m/s)
* 性别
* 体重(单位是kg)

2>行为
* 吃:每吃一次,体重增加0.5kg,输出吃完后的体重
* 吠(叫):输出所有的属性
* 跑:每吃一次,体重减少0.5kg,输出速度和跑完后的体重
* 比较颜色:跟别的狗比较颜色,如果一样,两个值做减法得零,返回NO(零值),不一样,
做减法得到非零值,返回YES(1)
* 比较速度:跟别的狗比较速度,返回速度差(自己的速度 - 其他狗的速度)

*/


#import <Foundation/Foundation.h>
@interface dogMove : NSObject
{
    @public
    NSString *_color;
    int _speed;
    NSString *_sex;
    float _weight;
}
-(void) eat:(NSString *)food;
-(void) bake;
-(void) dogRun;
-(BOOL) comparColor;
-(void) comparSpeed:(int)_speed2;
@end

@implementation dogMove
-(void) eat:(NSString *)food{
    _weight+=0.5f;
    NSLog(@"这条狗吃了%@,现在是:%.2fkg,速度是:%dm/s",food,_weight,_speed);
}
-(void) bake{
    NSLog(@"狗色是%@---跑%d---是条%@--重%.2fkg",_color,_speed,_sex,_weight);
}
-(void) dogRun{
    _weight -=0.5f;
    NSLog(@"狗现在速度是:%dm/s---重%.2fkg",_speed,_weight);
}
-(BOOL) comparColor:(NSString *)_color2{
    if(_color==_color2)
        return 1;
    else
        return 0;
}
-(void) comparSpeed:(int)_speed2{
    _speed -= _speed2;
    NSLog(@"两条狗速度相差%dm/s",_speed);
}


@end
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        dogMove * dogV = [dogMove new];
        dogMove * dogB = [dogMove new];
// dogV的初始化
        dogV -> _color = @"%@white";
        dogV -> _speed = 20;
        dogV -> _sex = @"%@man";
        dogV -> _weight = 20.0f;
// dogB的初始化
        dogB -> _color = @"%@black";
        dogB -> _speed = 18;
        dogB -> _sex = @"%@women";
        dogB -> _weight = 16.5f;
        [dogV eat:@"bone"];
        [dogV bake];
        [dogB bake];
    int tui = [dogV comparColor:dogB->_color];
        if (0==tui) {
            NSLog(@"两条狗的颜色一样吗?NO!");
        }else
            NSLog(@"两条狗的颜色一样吗?YES!");
        [dogV comparSpeed:dogB->_speed];
    }
    return 0;
}
/*
我定义BOOL类型方法,返回值为0或者1,怎么在控制台打印的效果是YES或者NO呢?
*/

11 个回复

正序浏览
蓁蓁犀利啊,么么哒~
回复 使用道具 举报
TTsu 发表于 2015-9-10 18:12
老师有说过可以在人"类"里面放狗属性啊?这么写确实就不难了,这是我的代码
/*
2.结合前面的“狗”类,设计 ...

谢谢了,懂了懂了,原来BOOL和类可以这样用,[someone feedDog: onemanDog]  [someone playDog: onemanDog]  正在看这里...
回复 使用道具 举报
狗的话太多了,每次上去说个没玩,还挺动感情的,就是不知道学的咋样
回复 使用道具 举报
TTsu 中级黑马 2015-9-10 18:12:25
9#
oxzjsku 发表于 2015-9-10 18:07
但是老师给的提示 是把狗放在了"人"类声明里面做属性用,这里我不会额,能用代码教一下吗? ...

老师有说过可以在人"类"里面放狗属性啊?这么写确实就不难了,这是我的代码
/*
2.结合前面的“狗”类,设计一个“人”类
1> 属性
* 姓名
* 狗(养了一条狗)

2> 行为
* 喂狗:每喂一次,狗就会执行“吃”这个行为
* 遛狗:每溜一次,狗就会执行“跑”这个行为

*/

#import <Foundation/Foundation.h>
//狗"类"声明
@interface dogMove : NSObject
{
    //狗的四种属性:颜色,速度,性别,体重
    @public
    NSString *_color;
    int _speed;
    NSString *_sex;
    float _weight;
}
//狗的四种行为:吃(什么),狗叫,跑,对比颜色,对比速度
-(void) eat:(NSString *)food;
-(void) bake;
-(void) dogRun;
-(BOOL) comparColor:(NSString *)_color2;
-(void) comparSpeed:(int)_speed2;
@end

//狗"类"实现
@implementation dogMove
-(void) eat:(NSString *)food{
    NSLog(@"还没吃饭呢,这条狗现在是%.2fkg",_weight);
    _weight+=0.5f;
    NSLog(@"这条狗吃了%@,现在是:%.2fkg,速度是:%dm/s",food,_weight,_speed);
}
-(void) bake{
    NSLog(@"狗色是%@---跑%d---是条%@--重%.2fkg",_color,_speed,_sex,_weight);
}
-(void) dogRun{
    _weight -=0.2f;
    NSLog(@"狗现在速度是:%dm/s---重%.2fkg",_speed,_weight);
}
-(BOOL) comparColor:(NSString *)_color2{
    if(_color==_color2)
        return YES;
    else
        return NO;
}
-(void) comparSpeed:(int)_speed2{
    _speed -= _speed2;
    NSLog(@"两条狗速度相差%dm/s",_speed);
}
@end
// 人"类"声明
@interface Persondo :NSObject
{
    @public
    //人类的两种属性:名字和遛狗
    NSString *_name;
    BOOL _havindog;
   
}
//人"类"的两个行为:喂狗和遛狗
-(void)feedDog:(dogMove *) _feedingfood;
-(void)playDog:(dogMove *) _playingdog;
@end
//人"类"实现
@implementation Persondo
//* 喂狗:每喂一次,狗就会执行“吃”这个行为
-(void)feedDog:(dogMove *) _feedingfood{
    NSLog(@"%@已经投食了",_name);
    [_feedingfood eat:@"bone"];
}
//* 遛狗:每溜一次,狗就会执行“跑”这个行为
-(void)playDog:(dogMove *) _playingdog{
    NSLog(@"%@已经遛狗一圈",_name);
    [_playingdog dogRun];
}
@end
//主函数
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //创建某个人的一条狗对象
        //给予某个人的狗初始化属性
        dogMove *onemanDog = [dogMove new];
        onemanDog ->_color = @"%@black";
        onemanDog ->_speed = 25;
        onemanDog ->_sex = @"%@mandog";
        //创建某个人这个对象
        //基于某个人这个对象初始化属性
        Persondo *someone = [Persondo new];
        someone ->_name =@"angelbaby";
        someone ->_havindog = YES;
        onemanDog ->_weight = 20;
        [someone feedDog: onemanDog];
        if (1==someone ->_havindog)
            NSLog(@"%@有条狗",someone-> _name);
        
        [someone playDog: onemanDog];
  
    }
    return 0;
}
回复 使用道具 举报
TTsu 发表于 2015-9-10 18:04
我第三题这么写的,定义一个狗类和一个人"类",在创建一个狗 对象 和一个人对象 ...

但是老师给的提示 是把狗放在了"人"类声明里面做属性用,这里我不会额,能用代码教一下吗?
回复 使用道具 举报
TTsu 中级黑马 2015-9-10 18:04:34
7#
oxzjsku 发表于 2015-9-10 17:59
这是我的代码额,不知道有没有对题目的意思理解错误,但是第三题那个我不知道是什么意思,是直接打印出那个行 ...

我第三题这么写的,定义一个狗类和一个人"类",在创建一个狗 对象 和一个人对象
回复 使用道具 举报
  1. //
  2. //  main.m
  3. //  第二题
  4. //2.设计一个”狗“类
  5. //1> 属性
  6. //* 颜色
  7. //* 速度(单位是m/s)
  8. //* 性别
  9. //* 体重(单位是kg)
  10. //2>行为
  11. //* 吃:每吃一次,体重增加0.5kg,输出吃完后的体重
  12. //* 吠(叫):输出所有的属性
  13. //* 跑:每吃一次,体重减少0.5kg,输出速度和跑完后的体重
  14. //* 比较颜色:跟别的狗比较颜色,如果一样,两个值做减法得零,返回NO(零值),不一样,
  15. //做减法得到非零值,返回YES(1)
  16. //* 比较速度:跟别的狗比较速度,返回速度差(自己的速度 - 其他狗的速度)
  17. //  Created by mac on 15/9/10.
  18. //  Copyright (c) 2015年 zhy. All rights reserved.
  19. //
  20. #import <Foundation/Foundation.h>
  21. #pragma mark 枚举狗的颜色
  22. typedef enum Color {kWhite,kBlack,kYellow}dogColor;

  23. #pragma mark "狗"类的声明
  24. //1> 属性
  25. @interface Dog : NSObject
  26. {
  27. @public
  28.     dogColor   _color;
  29.     float      _speed;
  30.     NSString * _sex;
  31.     float      _weight;
  32. }
  33. //2> 行为
  34. -(void)eat:(int)_time;
  35. -(void)bark;
  36. -(void)run:(int)_time2;
  37. -(int)compare:(dogColor)_color2;
  38. -(int)compare2:(float)_speed2;
  39. @end

  40. #pragma mark "狗"类的实现
  41. @implementation Dog
  42. //3> 实现
  43. -(void)eat:(int)_time
  44. {
  45.     _weight += (0.5)*_time;
  46.     NSLog(@"吃完后的体重:%.2f",_weight);
  47.    
  48. }
  49. -(void)bark
  50. {
  51.     NSLog(@"颜色:%d,速度:%.2fm/s,性别:%@,体重:%.2fkg",_color,_speed,_sex,_weight);
  52. }
  53. -(void)run:(int)_time2
  54. {
  55.     _weight -= (0.5)*_time2;
  56.    
  57.     NSLog(@"跑完后的体重:%.2fkg",_weight);
  58. }
  59. -(int)compare:(dogColor)_color2
  60. {
  61.     if (0 == (_color) - (_color2)) {
  62.         BOOL flag = NO;
  63.         NSLog(@"结果为%d,则跟别的狗颜色一样",flag);
  64.     }else{
  65.         BOOL flag = YES;
  66.         NSLog(@"结果为%d,则跟别的狗颜色不一样",flag);
  67.     }
  68.     return 0;
  69. }
  70. -(int)compare2:(float)_speed2
  71. {
  72.     float chaZhi = _speed - _speed2;
  73.    
  74.     NSLog(@"跟别的狗的速度差为:%.2f",chaZhi);
  75.    
  76.     return 0;
  77. }
  78. @end

  79. #pragma mark _
  80. int main(int argc, const char * argv[]){
  81.     @autoreleasepool {
  82.         Dog *dog =[Dog new];
  83.         
  84.         dog ->_color = kBlack;
  85.         
  86.         dog ->_sex   = @"公的";
  87.         
  88.         dog ->_speed = 6.02;
  89.         
  90.         dog ->_weight= 40;
  91.         
  92.         [dog eat:2];
  93.         
  94.         [dog bark];
  95.         
  96.         [dog run:2];
  97.         
  98.         [dog compare:kWhite];
  99.         
  100.         [dog compare2:5.01];
  101.     }
  102.    
  103.     return 0;
  104. }
复制代码
这是我的代码额,不知道有没有对题目的意思理解错误,但是第三题那个我不知道是什么意思,是直接打印出那个行为,还是和学c的时候那样用多文件开发之类的,还是调用那个"狗"类,反正就是卡在声明那块...就差这一题了.

回复 使用道具 举报
翟宇浩 发表于 2015-9-10 10:18
int tui = [dogV comparColor:dogB->_color];
这句应该是   BOOL tui = [dogV comparColor:dogB->_color]; ...

大神啊!!!!!收下我的膝盖
回复 使用道具 举报
Judyisapunk 发表于 2015-9-10 07:56
if (0==tui) {
            NSLog(@"两条狗的颜色一样吗?NO!");
        }else

我是想问通过返回值是0或者1就直接 判断打印YES 和NO了,不用再写分支语句,我没表述清楚
%@确实是我多写了,谢谢指正
回复 使用道具 举报
int tui = [dogV comparColor:dogB->_color];
这句应该是   BOOL tui = [dogV comparColor:dogB->_color];
因为这个方法的返回类型是BOOL,所以你必须定义一个BOOL类型的变量存储方法的返回结果。

重点就是下面这句了:
NSLog(@"比较结果为:%@",tui?@"YES":@"NO");

如果 tui 的值是1,则为真,输出YES,值是0,则为假,输出NO
回复 使用道具 举报
if (0==tui) {
            NSLog(@"两条狗的颜色一样吗?NO!");
        }else
            NSLog(@"两条狗的颜色一样吗?YES!");
        [dogV comparSpeed:dogB->_speed];
    }这几句打印出来的难道不应该是NO和YES吗,这样NSLog(@"两条狗的颜色一样吗?%d",tui)才会打出1和0.
另外, dogV -> _color = @"%@white";这样的赋值是不需要加%@的吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马