MOSAD_面向对象与Objective-C语法学习

面向对象与Objective-C语法学习


实验目的

  1. 学习掌握Objective-C语法,掌握基础字符串操作。
  2. 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之后,相信我也可以写出不错的代码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值