Groovy" java.lang.Integer.readLine()适用于参数类型:()值:[]"错误

时间:2015-03-19 14:27:34

标签: java groovy io

我正在尝试编写一个简短的代码,可以从控制台读取几行代码。这是我的代码:

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不知道从控制台获得输入。当我尝试调试时,它不允许我在控制台中输入任何内容。

1 个答案:

答案 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名称。