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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wukai 中级黑马   /  2015-3-21 23:41  /  2025 人查看  /  13 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

10、 定义一个学生类,需要有姓名,年龄,考试成绩三个成员属性,创建5个对象,属性可以任意值。(Objective-C)

1)    不使用@property,手动编写他们的访问器方法(getter和setter),注意内存管理(手动管理内存)
2)    增加一个便利构造器(快速构造器)
3)    使用NSLog输出学生对象时,输出信息格式为:My Name Is XXX  Age Is XXX Score Is XXX
4)    对5个学生对象按照成绩—》年龄—》姓名优先级排序(成绩相同按照年龄排序,成绩年龄相同按照姓名排序(5个学生的属性值自己随便设定,姓名不考虑中文,按26个大小字母排序))

13 个回复

倒序浏览
好高深的题。
回复 使用道具 举报
这个题的难度确实不小
回复 使用道具 举报
qianlongwuyong 来自手机 中级黑马 2015-3-22 07:07:34
板凳
加入基础班
回复 使用道具 举报
看到这个题,光题目就有点晕啊!
回复 使用道具 举报
这个题目我在入学考试做过。
  1. #import <Foundation/Foundation.h>

  2. @interface Student : NSObject
  3. {
  4.     NSString *_name; // 姓名
  5.     int _age; // 年龄
  6.     double _score; // 考试成绩
  7. }
  8. // _name的setter和getter
  9. - (void)setName:(NSString *)name;
  10. - (NSString *)name;

  11. // _age的setter和getter
  12. - (void)setAge:(int)age;
  13. - (int)age;

  14. // _score的setter和getter
  15. - (void)setScore:(double)score;
  16. - (double)score;

  17. // 不带参数的快速构造器
  18. + (Student *)student;
  19. // 带参数的快速构造器
  20. + (Student *)studentWithName:(NSString *)name andAge:(int)age andScore:(double)score;

  21. // 与其他Student对象比较大小的方法
  22. - (NSInteger)comperWithOtherStudent:(Student *)stu;
  23. @end
复制代码

  1. #import "Student.h"

  2. @implementation Student
  3. // _name的setter和getter
  4. - (void)setName:(NSString *)name
  5. {
  6.     if (name != _name)
  7.     {
  8.         [_name release];
  9.         _name = [name retain];
  10.     }
  11. }
  12. - (NSString *)name
  13. {
  14.     return _name;
  15. }

  16. // _age的setter和getter
  17. - (void)setAge:(int)age
  18. {
  19.     _age = age;
  20. }
  21. - (int)age
  22. {
  23.     return _age;
  24. }

  25. // _score的setter和getter
  26. - (void)setScore:(double)score
  27. {
  28.     _score = score;
  29. }
  30. - (double)score
  31. {
  32.     return _score;
  33. }

  34. - (void)dealloc
  35. {
  36.     [_name release];
  37.    
  38.     NSLog(@"姓名是:%@的Student对象被销毁。", _name);
  39.    
  40.     [super dealloc];
  41. }

  42. // 不带参数的快速构造器
  43. + (Student *)student
  44. {
  45.     return [[[self alloc] init] autorelease];
  46. }

  47. // 带参数的快速构造器
  48. + (Student *)studentWithName:(NSString *)name andAge:(int)age andScore:(double)score
  49. {
  50.     Student *stu = [Student student];
  51.    
  52.     stu.name = name;
  53.     stu.score = score;
  54.     stu.age = age;
  55.    
  56.     return stu;
  57. }

  58. // 重写description方法
  59. - (NSString *)description
  60. {
  61.     return [NSString stringWithFormat:@"My Name Is %@,Age Is %d Score Is %f", _name, _age, _score];
  62. }

  63. // 与其他Student对象比较大小的方法(升序)
  64. - (NSInteger)comperWithOtherStudent:(Student *)stu
  65. {
  66.     // 比较分数大小
  67.     if (self.score > stu.score)
  68.     {
  69.         return NSOrderedDescending;
  70.     }
  71.     else if (self.score < stu.score)
  72.     {
  73.         return NSOrderedAscending;
  74.     }
  75.     else if (self.score == stu.score)
  76.     {
  77.         // 如果分数相同比较年龄大小
  78.         if (self.age > stu.age)
  79.         {
  80.             return NSOrderedDescending;
  81.         }
  82.         else if (self.age < stu.age)
  83.         {
  84.             return NSOrderedAscending;
  85.         }
  86.         else if (self.age == stu.age)
  87.         {
  88.             // 如果分数与年龄都相同比较名字的首字母
  89.             if ([self.name characterAtIndex:0] > [stu.name characterAtIndex:0])
  90.             {
  91.                 return NSOrderedDescending;
  92.             }
  93.             else if ([self.name characterAtIndex:0] < [stu.name characterAtIndex:0])
  94.             {
  95.                 return NSOrderedAscending;
  96.             }
  97.             else
  98.             {
  99.                 return NSOrderedSame;
  100.             }

  101.         }
  102.     }
  103.    
  104.     return -1;
  105. }
  106. @end
复制代码

  1. #import <Foundation/Foundation.h>
  2. #import "Student.h"

  3. int main(int argc, const char * argv[])
  4. {
  5.     // 创建一个自动释放池
  6.     @autoreleasepool
  7.     {
  8.         // 创建5个学生对象
  9.         Student *stu1 = [Student studentWithName:@"jack" andAge:30 andScore:50];
  10.         Student *stu2 = [Student studentWithName:@"lose" andAge:19 andScore:70];
  11.         Student *stu3 = [Student studentWithName:@"anna" andAge:25 andScore:90];
  12.         Student *stu4 = [Student studentWithName:@"fan" andAge:15 andScore:30];
  13.         Student *stu5 = [Student studentWithName:@"tom" andAge:15 andScore:85];
  14.         
  15.         // 输出学生对象
  16.         NSLog(@"%@", stu1);
  17.         
  18.         // 将5个学生对象添加到一个数组中
  19.         NSArray *students = [NSArray arrayWithObjects:stu1, stu2, stu3, stu4, stu5, nil];
  20.         
  21.         // 对数组进行排序
  22.         NSArray *array = [students sortedArrayUsingSelector:@selector(comperWithOtherStudent:)];
  23.         
  24.         // 输出排序后的数组
  25.         NSLog(@"%@", array);
  26.     }
  27.    
  28.     return 0;
  29. }
复制代码
回复 使用道具 举报
面试除了这个题,还有啥题啊
回复 使用道具 举报
静好 初级黑马 2015-3-23 12:42:51
8#
在一个程序里实现这些内容么,是都不能使用@property么
回复 使用道具 举报
雨漪 中级黑马 2015-3-23 13:16:34
9#
别被题目吓到了,其实很基础啊
回复 使用道具 举报
这道题目不好做的原因,你学完了基础视频还要附加了解下排序方法,基础视频并没有讲
回复 使用道具 举报
幸亏进了基础班,真不会
回复 使用道具 举报
楼主面试几分啊,出结果了么
回复 使用道具 举报
雨漪 发表于 2015-3-23 13:16
别被题目吓到了,其实很基础啊

很基础....
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马