题目:
定义一个学生类,需要有姓名,年龄,考试成绩三个成员属性,创建5个对象,属性可以任意值。(Objective-C)
1) 不使用@property,手动编写他们的访问器方法(getter和setter),注意内存管理(手动管理内存)
2) 增加一个便利构造器(快速构造器)
3) 使用NSLog输出学生对象时,输出信息格式为:My Name Is XXX Age Is XXX Score Is XXX
4) 对5个学生对象按照成绩—》年龄—》姓名优先级排序(成绩相同按照年龄排序,成绩年龄相同按照姓名排序(5个学生的属性值自己随便设定,姓名不考虑中文,按26个大小字母排序))
这是一道黑马入学考试题,我做了3个小时,终于做好了这道题,涉及到了很多OC语言基础的知识点,由于使用的是xocde6.3.2,没有办法进行手动内存管理,所以省略了这一部分,供大家参考
代码:
#import <Foundation/Foundation.h> @interface Student : NSObject { //姓名 NSString* _name; //年龄 int _age; //成绩 int _score; } -(void)setName:(NSString*)name; -(void)setAge:(int)age; -(void)setScore:(int)score; -(NSString*)getName; -(int)getAge; -(int)getScore; +(BOOL)isNameHigher:(NSString *)n1 and:(NSString *)n2; //比较两个学生的排名,是否第一个学生比第二个学生排名靠前 +(BOOL)isHigher:(Student*) student1 and:(Student*)student2; -(id)initWithName:(NSString*)name andAge:(int)age andScore:(int)score; @end
#import "Student.h" @implementation Student -(void)setName:(NSString *)name{ _name = name; } -(void)setAge:(int)age{ _age = age; } -(void)setScore:(int)score{ _score = score; } -(NSString *)getName{ return _name; } -(int)getAge{ return _age; } -(int)getScore{ return _score; } -(id)initWithName:(NSString *)name andAge:(int)age andScore:(int)score{ if (self = [super init]) { _name = name; _age = age; _score = score; } return self; } -(NSString *)description{ // return [NSString stringWithFormat:@"%@ %d %d",_name,_age,_score]; return [NSString stringWithFormat:@"My name is %@ age is %d score is %d",_name,_age,_score]; } +(BOOL)isNameHigher:(NSString *)n1 and:(NSString *)n2{ unsigned long time; if ([n1 length]>[n2 length]) { time = [n2 length]; }else{ time = [n1 length]; } for (int i = 0; i<time; i++) { if ([n1 characterAtIndex:i]<[n2 characterAtIndex:i]) { return YES; }else if ([n1 characterAtIndex:i]>[n2 characterAtIndex:i]){ return NO; } } NSLog(@"所有条件都相同,根据姓名长度比较"); return [n1 length]<[n2 length]; } +(BOOL)isHigher:(Student*) student1 and:(Student*)student2{ //比较两个学生的分数,分数高的返回 if ([student1 getScore] > [student2 getScore]) { return YES; }else if ([student1 getScore] < [student2 getScore]){ return NO; }else {//如果两个学生的分数相同,比较两个学生的年龄,年龄低的返回 if ([student1 getAge] < [student2 getAge]) { return YES; }else if ([student1 getAge] > [student2 getAge]){ return NO; }else{ //如果两个学生的分数和年龄都相同,根据姓名(限制为英文)前端字母排序 NSString* n1 = [[student1 getName] lowercaseString]; NSString* n2 = [[student2 getName] lowercaseString]; if ([self isNameHigher:n1 and:n2]){ return YES; }else{ return NO; } } } } @end
#import <Foundation/Foundation.h> #import "Student.h" int main(){ Student* s1 = [[Student alloc]initWithName:@"Tim" andAge:11 andScore:79]; Student* s2 = [[Student alloc]initWithName:@"Calo" andAge:12 andScore:86]; Student* s3 = [[Student alloc]initWithName:@"QaJin" andAge:14 andScore:95]; Student* s4 = [[Student alloc]initWithName:@"Jaren" andAge:11 andScore:95]; Student* s5 = [[Student alloc]initWithName:@"Jare" andAge:11 andScore:95]; NSMutableArray* students = [NSMutableArray arrayWithObjects:s1,s2,s3,s4,s5, nil]; NSUInteger count = [students count]; //使用冒泡排序对可变集合(学生集合)进行排序 for (int i = 0; i<count; i++) { for (int j = 0; j<count; j++) { if (j<count-1 && ![Student isHigher:students[j] and:students[j+1]]) { Student* s =students[j]; [students setObject:students[j+1] atIndexedSubscript:j]; [students setObject:s atIndexedSubscript:j+1]; } } } NSLog(@"%@",students); return 0; }
时间: 2024-10-17 13:52:16