2016-11-05 7 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によってまだ処理されていない単一のものを想像することはできないからです。

EDIT:除算とsqrtは私には分かりますが、add、sub、multのアイデアが必要です。

+0

Javaで処理するとはどういう意味ですか? – ItamarG3

+0

私は自分のメソッドを追加することを意味します。これは、前提条件xまたはyがInteger.MAX_VALUEより大きいと想像することができますが、これはすでにJavaによって処理されています。 – koin

+0

sqrtの前提条件は非負ですか? divの場合は 'y!= 0'ですか?多分私は間違っているかもしれませんが、それはそれかもしれません – ItamarG3

答えて

1

Integer.MAX_VALUEの値を2つ追加すると、結果はintに収まらず、切り捨てられます。一方、入力ドメインが制限されている場合、結果が切り捨てられず、代わりに期待値が保証されます。

たとえば、x <= Integer.MAX_VALUE/2y <= Integer.MAX_VALUE/2場合、和x + yInteger.MAX_VALUE以下となり、従って正の整数のための切り捨てがないであろう。同様の推論を負の値とInteger.MIN_VALUEに使用できます。減算の前提条件も同じ方法で行うことができます。

乗算の場合、いずれかのオペランド絶対値がsqrt (Integer.MAX_VALUE)より小さい場合、その積はintの範囲内になります。

オーバーフローとアンダーフローを検出するためには、より洗練された方法がありますが、クラス練習では、このような前提条件がうまくいくようです。

関連する問題