我(几乎)制定了一个杯子排序算法,该算法采用颜色和半径参数,然后吐出按半径长度排序的杯子名称。 Example input
2
blue 7
10 red
Example output
red
blue
问题是我想创建一个过滤器来检查拆分时第一个值是否为数字。然后将此数字除以2,两个值都取反。我尝试了is_a? Integer
,但是在irb控制台中收到了expecting end of input
错误。我尝试了== int
。
代码如下:
class Cup
attr_accessor :colour, :radius
def initialize(colour, radius)
@colour = colour
@radius = radius
end
end
cups = []
puts "How many cups are there?"
gets.to_i.times do |n|
puts "Enter Cup-#{n+1} colour & radius:"
value = gets.split " "
if
value.first.to_i == int?
then
value.first / 2
value.reverse
cups << Cup.new(value[0], value[1])
end
cups << Cup.new(value[0], value[1])
end
print cups.colour.sort_by { |cup| cup.radius }
非常欢迎收到有关该算法的其他反馈。
答案 0 :(得分:1)
用户在控制台中提供的任何输入都是字符串,因此您可以执行以下操作
puts "How many cups are there?"
gets.to_i.times do |n|
puts "Enter Cup-#{n+1} colour & radius:"
value = gets.chomp.split(" ")
order = Integer(value[0]) rescue false # order will have value if it is proper integer, else false
cups << (order ? Cup.new(value[1], value[0].to_i) : Cup.new(value[0], value[1].to_i))
end
cups.sort_by { |cup| cup.radius }.each { |cup| puts cup.colour } if cups.present?
此处使用to_i
无效,因为它将为字符串'red'返回0
此外,还可以确保用户确实输入了整数,否则代码将无法正常运行。