Алгоритм сортировки Ruby / Cup не будет проверять, является ли строка целым числом - PullRequest
0 голосов
/ 13 декабря 2018

Я (почти) создал алгоритм сортировки кубков, который принимает параметры цвета и радиуса, затем выплевывает имена кубков, ранжированные по длине радиуса.Example input

2
blue 7
10 red

Example output

red
blue

Проблема в том, что я хочу создать фильтр, который проверяет, является ли первое значение числом при разделении.Затем это число делится на 2, и оба значения меняются местами.Я попытался is_a? Integer, но получил ошибку expecting end of input в консоли irb.Я пытался == 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 голосов
/ 13 декабря 2018

Независимо от того, что вводит пользователь в консоли, будет строкой, поэтому вы можете сделать, как показано ниже,

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 здесь недопустимо, так как вернет 0 для строки 'red'

И также предполагается, что пользователь наверняка введет целое число, иначе код не будет работать так, как он должен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...