代码应返回用户输入的两个数字中的最大值

时间:2016-06-15 10:39:41

标签: ruby

这是代码。

puts "Give me a number"
one = gets.chomp
puts "Give me another number"
two = gets.chomp

if one > two
    puts "This is the bigger number #{one}"
else
    puts "This is the bigger number #{two}"
end

我不知道我的错在哪里。

2 个答案:

答案 0 :(得分:2)

你没有将它们更改为整数,gets.chomp给你字符串。

 puts "Give me a number"
 one = gets.chomp.to_i
 puts "Give me another number"
 two = gets.chomp.to_i

答案 1 :(得分:0)

首先,您正在收集“应用程序”的外部用户的输入,然后您必须决定如何管理错误的输入和转换。

  • 在任何情况下,gets都会返回一个String
  • 您要使用的是数字,但他们是IntegerFloat

由于StringComparable,您的原始代码将会运行,但可能无法产生预期的回报。

假设您只对整数感兴趣。

您需要考虑三种转换功能:

  • Kernel#Integer(包含在顶级绑定中)
  • String#to_i

String#to_i永远不会返回错误。

 'abcd'.to_i      #=> 0
 '1.2'.to_i       #=> 1
 nil.to_i         #=> 0
如果String不是有效的Integer,

Kernel#Integer将返回错误。 (我通常认为它更适合用户输入)。

Integer('0')     #=> 0
Integer('abcd')  #=> ArgumentError
Integer(nil)     #=> TypeError

最后,您必须比较您的输入。我个人会使用Array#max,因为它传达了最佳的可读性(但仍以牺牲性能为代价,但您似乎并未处于性能关键系统中)。

我的最终代码看起来像这样(没有错误处理):

inputs = []
2.times do
  puts 'Give me a number'
  inputs << Integer(gets.chomp) # or use gets.chomp.to_i
end

puts "This is the bigger number : #{inputs.max}"

可以进行更多的重构,但我认为它不适合Ruby中的初学者。