2016-11-05 50 views
1

我必須基於此接口在Java中創建計算器。按合同設計查找前提條件

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對我來說很清楚,但我需要一些想法添加,分和多。

+0

你的意思是由java處理什麼? – ItamarG3

+0

我的意思是我的增加方法,我只能想象爲一個前提條件x或y大於Integer.MAX_VALUE,但這已經由java處理。 – koin

+0

sqrt的先決條件是否定的?或爲div是'y!= 0'?也許我只是錯了,但那可能是 – ItamarG3

回答

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的範圍內。

更復雜的方式來檢測溢出和下溢是可能的,但對於一個類的練習,這樣的先決條件似乎很好。