2011-02-21 22 views
8

Groovyを初めて使用しています。これらは、[OK]をしている間Groovyの奇妙な除算演算子

int[] a = [1,2,3,4,5] 
int lo=0 
int hi=4 

int x = a[(lo+hi)/2] 
assert x == 3 

BigDecimal

int x = a[(int)(lo+hi)/2] 

とGroovyで

int i = (lo+hi)/2 
int x = a[i] 
+0

例外を教えてください。 –

+0

groovy.lang.MissingMethodException:メソッドのシグネチャがありません:[I.getAt()は引数の型に適用されます:(java.math.BigDecimal)values:[2] 可能な解決策:getAt(groovy.lang.Range)、getAt getAt(java.lang.Integer)、getAt(java.util.Collection)、getAt(groovy.lang.ObjectRange)、getAt(groovy.lang.IntRange)、getAt(java.lang.String) – hint

答えて

11

除算の結果はオペランドがある場合、これは、実行時に例外をスローする理由

タイプInteger,Long,BigIntegerまたはBigDecimal

インスタンスthis tutorialを参照されたい:

分割演算子「/」および「/ =」ダブル結果をもたらすいずれかのオペランドがダブルとのBigDecimal結果フロートのいずれかである場合、またはそうでなければ(両方オペランドはInteger、Long、BigInteger、BigDecimalの任意の組み合わせです)。

1/2 == new java.math.BigDecimal("0.5"); 

例えば

[...]

[...]

整数除算は除算の結果をキャストすることによって整数型を行うことができます。例:

assert (int)(3/2) == 1I; 
+3

すべての数値型もサポートしています'intdiv()'メソッドは、キャストなしで整数除算を行うことを可能にします。 'assert 3.intdiv(2)== 1I' – ataylor

関連する問題