2015-06-30 3 views
0

Этот фрагмент кода принимает ряд цифр, а затем выводит самый высокий введенный. Предполагается, что в коде есть недостаток, который для определенной серии чисел не приведет к правильному выходу. Однако я не могу найти ряд чисел, где правильный вывод не отображается и не может увидеть проблему в коде.Что не так в этом коде (groovy)

int m = 0 
boolean finished = false 
while (!finished) { 
    print "Enter another number (0 to finish): " 
    String s = System.console().readLine() 
    int num = Integer.parseInt(s) 
    if (num != 0) { 
     if (num > m) { 
      m = num 
     } 
    } else { 
     finished = true 
    } 
} 
println m 
+0

Ваш код ожидает целое число. Попробуйте несколько очень маленьких чисел с плавающей запятой (меньше 1,0), чтобы увидеть, как они анализируются как целое. – vallismortis

+0

Хорошо, спасибо, что это перепутало мой разум. Однако я предположил, что этот вопрос подразумевает, что возникла проблема, когда были введены целые числа. Можно ли изменить этот код так, чтобы он работал как с целыми числами, так и с числами с плавающей запятой? –

+0

Groovy не мой язык, но я, когда вижу типизированные переменные и пользовательский ввод, который не проверен, мой вопрос: что происходит, когда вход не соответствует объявленному типу? Вы также можете взглянуть на поведение вашего кода с отрицательными номерами. – vallismortis

ответ

0

Вы ответили, что сами - отрицательные числа являются виновниками. Это фиксированный вариант:

Integer m = null 
boolean finished = false 
while (!finished) { 
    print "Enter another number (0 to finish): " 
    String s = System.console().readLine() 
    Integer num = Integer.parseInt(s) 
    if (num != 0) { 
     if (num > m) { 
     m = num 
     } 
    } else { 
     finished = true 
    } 
} 
println (m == null ? "No input provided" : m) 
+0

Ах, конечно, большое спасибо за помощь. –

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