2016-03-22 10 views
1

私がしようとしているの範囲は、自分自身は、私はあなたが私I何を伝えることができる7.Groovyのリストの操作と

def numbers=[1..100] 
def divisibleBy7 = numbers.findAll {it % 7 == 0 } 
divisibleBy7.each{println it} 

で割り切れる100まで1内の数字を見つけるためにしようとしています、Groovyの使用を開始します間違っているgroovyコンソールからのエラーメッセージはあまり明確ではありません。

Exception thrown 

groovy.lang.MissingMethodException: No signature of method: groovy.lang.IntRange.mod() is applicable for argument types: (java.lang.Integer) values: [7] 
Possible solutions: pop(), min(), max(), add(java.lang.Object), add(java.lang.Object), add(int, java.lang.Object) 
    at divisibleBy7$_run_closure1.doCall(divisibleBy7.groovy:2) 
    at divisibleBy7.run(divisibleBy7.groovy:2) 

答えて

4

問題は[1..100]です。角括弧はリストの構文です。したがって、これは範囲自体ではなくIntRangeのリストです。あなたが望むものは:

def numbers = 1..100 
def divisibleBy7 = numbers.findAll {it % 7 == 0 } 
divisibleBy7.each{println it} 

範囲の周りに括弧を使用することもできます。

+1

ありがとう@jstrater。私が間違っているのを修正してくださいdef numbers = 1..100は1から100までの数字を含むリストを返します。def number = 1..100はdef numbers = [1,2,3,4,5,6 、7,8、....、100] –

+0

@ mahtab-alamよろしくお願いします。それはほとんど正しいです。範囲はリストの拡張です。 findAllや.eachを実行すると、リストと同じように動作します。 Groovyコンソールで '1..5 == [1,2,3,4,5]'を試してみることもできます。しかし、 '(1..5).class == [1,2,3,4,5] .class'はfalseになります。詳細については、[docs for Range](http://docs.groovy-lang.org/latest/html/gapi/groovy/lang/IntRange.html)を参照してください。 – jstrater