2016-03-22 2 views
1

Я пытаюсь получить сам начал с Groovy, я пытаюсь выяснить число в пределах от 1 до 100, которые делятся на 7.Groovy Работа со списками и диапазоны

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

Можете ли вы сказать мне, что я «Я делаю неправильно. Сообщение об ошибке из groovy console не очень понятно

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

Thanks @jstrater. Исправьте меня Я ошибаюсь def numbers = 1..100 дает мне список, содержащий числа от 1 до 100. Таким образом, def numbers = 1..100 эквивалентно def numbers = [1,2,3,4,5,6 , 7,8, ...., 100] –

+0

@ mahtab-alam Добро пожаловать. Это в основном верно. Диапазоны - это расширение списка. Когда вы найдете findAll или .each, он будет вести себя так же, как и список. Вы даже можете попробовать '1..5 == [1,2,3,4,5]' в groovy console и он возвращает true; однако, '(1..5) .class == [1,2,3,4,5] .class' будет ложным. Для получения дополнительной информации см. [Docs for Range] (http://docs.groovy-lang.org/latest/html/gapi/groovy/lang/IntRange.html) – jstrater

Смежные вопросы