按合同设计发现前提条件

时间:2016-11-05 18:43:14

标签: java design-by-contract preconditions

我必须基于此接口在Java中创建一个Calculator。

public interface CalculatorIF {
    int add(int x, int y);
    int sub(int x, int y);
    int mult(int x, int y);
    //double div(int x, int y);
    //int sqrt(int x);
}

但对于每种方法,我都需要事前条件。 我真的需要前提条件的帮助,因为我无法想象一个有意义且没有被Java处理的单一条件。

编辑:分区和sqrt对我很清楚,但我需要一些添加,分和多的想法。

1 个答案:

答案 0 :(得分:1)

如果您添加两个Integer.MAX_VALUE值,则结果将不适合int并将被截断。另一方面,如果输入域受到限制,我们可以始终保证结果不会被截断并且具有预期值。

例如,如果x <= Integer.MAX_VALUE / 2y <= Integer.MAX_VALUE / 2,那么总和x + y将小于或等于Integer.MAX_VALUE,因此正整数不会被截断。类似的推理可用于负值和Integer.MIN_VALUE。减法的前提条件可以用同样的方式完成。

对于乘法,如果任一操作数绝对值小于sqrt (Integer.MAX_VALUE),则其乘积将在int范围内。

可以采用更复杂的方法来检测上溢和下溢,但对于课堂练习来说,这样的前提条件似乎很好。