编程的一个难题是,方法我可以穷尽,但有些结果并非是用户的选择或期望,换个说法,有些表达具有二义性,可以这样,也可以那样,或者因为表达不够完整,因而结果是什么可能也有二义性。那么我们生成哪个结果呢?
本程序有很多这样的情况。比如,用户输入了计算式,他再按开根号,你是给他当前项的根号值,还是给算式结果的根号值?用户输入了不完整的算式,你怎样处理?反正这都考验的不是编程能力,而是策略选择能力。
一方面你可以坚持严密原则,算式不完整是吧,我不给答案,而提示错误,你也可以以善意的原则修改最可能错误,给最善意的结果。另一方面,你也可以定义不完整为完整,或者确定用户最可能的意图。
以上的文字是不是很绕?
比如这样两个算式:
9*
9*9*
我的处理方法是,前面的我看作是9*9,后面的也看作9*9。为什么这样呢?9*,我将之定义为9的平方,即定义不完整为完整。而后面这个,我按最善意的原则认为用户多按了*号,所以计算前删除掉。
比如取反,用户按了9*9*,然后按取反,你取哪个反?第三个数字还没出来呢!那最可能的意图是取第二个数的反。
第十七课结语。以上说的都会体现在编程过程中。你不能不会用户的意,也不能只会用户的意,而不能自已定义。
第十七课预期策略选择——C#计算器编程教学
最新推荐文章于 2024-06-06 10:55:37 发布