итератор печатает до 48, когда аргумент равен 1 - PullRequest
0 голосов
/ 29 марта 2012
static void main(args){

        System.in.withReader {
            def input = it.readLine()
            for(def i = 0; i < input; i++){
                println i
            }
        }

    }

Исходный код ... простой, я думаю, но я не знаю, почему он печатает до 48 ... здесь выводится, если задан аргумент 1.

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48

что может бытьпроблема

Ответы [ 2 ]

4 голосов
/ 29 марта 2012

Тартар прав, решение состоит в том, чтобы изменить

def input = it.readLine()

Для

def input = Integer.parseInt( it.readLine() )

Или (более Groovy)

def input = it.readLine().toInteger()

(причина, по которой он использует значение ASCII, равное 1, заключается в том, что groovy преобразует отдельные строки символов в их значения ASCII, если вы попытаетесь привести их к целому числу ... Утверждалось, что это сбивает с толку, и это может изменение в будущих версиях groovy, но пока оно остается из соображений обратной совместимости)

3 голосов
/ 29 марта 2012

Значение ascii для символа 1 равно 49. Так что преобразовать ввод в целое число может быть?

...