面向对象与Objective-C语法学习
实验目的
- 学习掌握Objective-C语法,掌握基础字符串操作。
- OO知识——多态与继承
实验内容
给定三个用户张三,李四,王五。
给定四种语言英语、日语、德语、西班牙语。
实现场景输出(log形式即可):随机选择一个用户和一种语言学习,从当前日期开始,随机产生时间进行学习,输出学习进度直至学习完毕。每个语言共8个tour,每个tour共4个unit,每次学习一个unit。
要求:
- 随机选定人名、语言后,一次性输出所有的结果。
- 随机时间指的是每次随机1-5天,每次学习时间在前一次的基础上加上刚刚随机出的天数。
- 需要用到多态。
实验步骤
实验中,使用的是TA给出的.h文件。
因此,首先我们先对头文件中定义的方法进行实现。
首先是LearnOneUtil方法,每次调用对util加1,超过4则重置为1,tour加1.
- (void)learnOneUnit{
if (progress_unit==4) {
progress_tour++;
progress_unit=1;
}else{
progress_unit++;
}
}
getTour和getUtil方法比较简单,不作介绍~
isFinish方法则是判断tour是否已经达到8而unit达到4。
- (bool)isFinish{
if (self.getTour==9 && self.getUnit==1) {
return true;
}
return false;
}
然后依照TA给定的多态要求,对getName函数进行重写。以下以English为例。
@implementation English
- (NSString *)getName{
NSString *str = @"英语";
return str;
}
接下来是主函数部分,首先需要实现对人员和语言的随机选择,利用arc4random函数随机一个整数,根据整数进行对应的赋值。
int randompeople = arc4random() % 3;
int randomlanguage =arc4random() % 4;
NSString *name;
switch (randompeople) {
case 0:
name = @"张三";
break;
...
}
id lang;
switch (randomlanguage) {
case 0:
lang = [English new];
break;
...
}
日期处理部分,使用NSDateFormatter进行日期格式转换,利用dateByAddingTimeInterval方法对日期进行不断的增加。同时,利用isFinish函数的返回值判断过程是否结束。
NSDate *currentDate = [NSDate date];
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
formatter.dateFormat = @"yyyy年MM月dd日";
NSString *date = [formatter stringFromDate:currentDate];
NSTimeInterval oneday = 24*60*60;
while ([lang isFinish]==false) {
NSLog(@"%@ %@ 学习%@ tour %zi util %zi",name,date,[lang getName],[lang getTour],[lang getUnit]);
int days = arc4random() % 5 + 1;
[lang learnOneUnit];
currentDate = [currentDate dateByAddingTimeInterval: oneday * days];
date = [formatter stringFromDate:currentDate];
}
之后,点击运行即可完成输出。
实验心得
本次作业的题目是非常简单的,用别的语言,可以很快完成。但是使用ObjectiveC,由于对其许多语法规则不熟悉,因此写起来还是比较吃力的。实际代码可能在有经验的人眼里也会看着比较幼稚。但毕竟万事开头难,等我完全熟悉了ObjectiveC之后,相信我也可以写出不错的代码。