我正在尝试编写一个简短的代码,可以从控制台读取几行代码。这是我的代码:
System.in.withReader {
int a = it.readLine() as int
(1..a).each {
int b = it.readLine() as int
def sum = 0
(0..(b-1)).each {d ->
sum+=(-1)^d/(2*d+1)
}
println sum/4
}
}
这是来自控制台的输入:
1
20
这是我得到的错误:
java.lang.Integer.readLine() is applicable for argument types: () values: []
我有一种感觉,Groovy不知道从控制台获得输入。当我尝试调试时,它不允许我在控制台中输入任何内容。
答案 0 :(得分:1)
each
的第一个it
阴影withReader
:
System.in.withReader { /* implicit it */
int a = it.readLine() as int
(1..a).each { /* implicit it */
int b = it.readLine() as int // this `it` now is an int from (1..a)
为内部it
提供一个名称(就像稍后使用d
一样),原始的it
仍然是读者。为了进一步解决这个问题,你甚至可能想给读者一个自己的var名称。