在先前的博文中 我 创建了 Add:这项措施,并且 用 这项措施 将 两个比例 相加。但是 在先前的例子当中,我相加的两个比例 分别 是 1/2 和 1/3,结果 是 5/6,这个结果 刚好 不需要 约分。如果 我 换 另外两个比例 相加,比如:1/4 和 1/2,那么 结果 就是 像下面这样:
很显然 6/8这个结果 是 可以约分成 3/4的。我们 只要找到 分子 和 分母的最大公约数,再 将 分子 和 分母 除以 它们的最大公约束,就可以 得到 约分后的结果。在objective-c当中,我们 可以创建 一项叫reduce:的措施,再 对 代表相加结果的物件 采取 这项措施,就可以 得到 约分后的结果。我们 先 看看 在程序当中 如何创建、采取 reduce:这项措施:
文件Fraction.h:
文件Fraction.m:
文件main.m:
在接口部分,也就是 文件Fraction.h当中,我 向编译器 说明了 reduce:这项措施,就像 这样:
减号 代表 这项措施 只能 针对物件 实施。(void) 表明 这项措施 不传回 任何数值。reduce 表示 这项措施的名称。
在实施部分,也就是 文件Fraction.m当中,我 向编译器 说明了 reduce:这项措施 具体 是如何 实施的。其中 我 创建了 三个整数类型的变量:
其中 变量u 代表 被除数,变量v 代表 除数,而 变量remainder 代表 余数。首先 被除数 和 除数的值 都被设定 为 分子 和 分母。
接着 进入 一个while()循环,循环中的语句 会被 反复 执行。
这行语句 将 被除数u 和 除数v 相除的余数 存储 在变量remainder当中。
这两行语句 将 上一步的除数 当作 下一步的被除数,将 上一步的余数 当作 下一步的除数。接着 重新 执行
这行语句。
循环体中的语句 会执行 到 除数,也就是 变量v的值,等于0为止,因为 循环条件
规定 执行循环体的条件 是 除数,也就是 变量v的值,不能等于 0。循环 停止执行前 最后一步的被除数,也就是 变量u的值,就是 我们要求的最大公约数。
最后的
两行语句 将 分子 和 分母 分别 除以 它们的最大公约数,也就是 变量u的值。
在主程序main()当中
这行语句 对 代表第一个比例的物件fractionOne 采取了 Add:这项措施,并且 附带了 代表第二个比例的物件fractionTwo 作为参数。于是 第二个比例 就被加 进了 第一个比例当中,第一个比例 就成为了 两个比例相加的和。
接着的
这行语句 对 物件fractionOne 采取了 reduce:这项措施,对 其 进行约分。
运行 这个程序,可以得到 更加满意的结果:
在reduce这项措施当中 我 创建了 三个变量u、v 和 temp。这三个变量 只有 在reduce:这项措施 开始执行时 才出现,而且 reduce:这项措施 执行结束后,这三个变量 也会消失。除此之外,你 只能 在reduce:这项措施当中 对 这三个变量 进行读写。于是 u、v 和 temp这三个变量 就叫做 本地变量。