Ruby / Cup排序算法不会检查字符串是否为整数

时间:2018-12-13 11:46:15

标签: ruby algorithm logic

我(几乎)制定了一个杯子排序算法,该算法采用颜色和半径参数,然后吐出按半径长度排序的杯子名称。 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 }

非常欢迎收到有关该算法的其他反馈。

1 个答案:

答案 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

此外,还可以确保用户确实输入了整数,否则代码将无法正常运行。