2011-02-21 13 views
8

में अजीब डिवीजन ऑपरेटर मैं ग्रोवी के लिए नया हूं।ग्रोवी

क्यों इस क्रम पर अपवाद फेंकता है:

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

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

इन ठीक हैं, जबकि:

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

और

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

कृपया हमें अपवाद बताएं। –

+0

groovy.lang.MissingMethodException: विधि का कोई हस्ताक्षर नहीं: [I.getAt() तर्क प्रकारों के लिए लागू होता है: (java.math.bigDecimal) मान: [2] संभावित समाधान: getAt (groovy.lang.Range), getAt (java.lang.Integer), getAt (java.util.Collection), getAt (groovy.lang.ObjectRange), getAt (groovy.lang.IntRange), getAt (java.lang.String) – hint

उत्तर

11

ग्रूवी में एक BigDecimal में एक प्रभाग परिणाम ऑपरेंड कर रहे हैं Integer टाइप करें, Long, BigInteger या BigDecimal:

उदाहरण this tutorial के लिए देखें:

प्रभाग ऑपरेटरों "/" और "/ =" एक डबल परिणाम उपज यदि या तो संकार्य या तो फ्लोट डबल और एक BigDecimal परिणाम है या अन्यथा (दोनों ऑपरेंड इंटेगर, लांग, बिगइंटर, या बिगडेसीमल का कोई संयोजन है)।

[...]

उदाहरण

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

के लिए [...]

पूर्णांक विभाजन विभाजन का परिणाम कास्टिंग द्वारा अभिन्न प्रकार पर किया जा सकता। उदाहरण के लिए:

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

सभी संख्यात्मक प्रकार भी समर्थन करते हैं 'intdiv() 'विधि जो आपको बिना कास्टिंग के पूर्णांक विभाजन करने की अनुमति देती है, उदाहरण के लिए 'जोर दें 3.intdiv (2) == 1 आई' – ataylor