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]
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]
除算の結果はオペランドがある場合、これは、実行時に例外をスローする理由
タイプInteger
,Long
,BigInteger
またはBigDecimal
:
インスタンスthis tutorialを参照されたい:
分割演算子「/」および「/ =」ダブル結果をもたらすいずれかのオペランドがダブルとのBigDecimal結果フロートのいずれかである場合、またはそうでなければ(両方オペランドはInteger、Long、BigInteger、BigDecimalの任意の組み合わせです)。
1/2 == new java.math.BigDecimal("0.5");
例えば
[...]
[...]
整数除算は除算の結果をキャストすることによって整数型を行うことができます。例:
assert (int)(3/2) == 1I;
すべての数値型もサポートしています'intdiv()'メソッドは、キャストなしで整数除算を行うことを可能にします。 'assert 3.intdiv(2)== 1I' – ataylor
例外を教えてください。 –
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