Сортировка и петли в рубине - PullRequest
0 голосов
/ 24 сентября 2018

Это программа, которая запрашивает у пользователя информацию о характеристиках драгоценного камня и затем выводит на экран.Такие вещи, как цвет, цена и имя.Я написал это в расширение, где пользователь вводит все это и распечатывает их.Теперь я застрял там, где я должен зациклить и позволить пользователю вводить любое количество драгоценных камней.Например, если он / она входит в 3 драгоценных камня, он должен зацикливаться и позволять пользователю вводить характеристики 3 типов драгоценных камней.Я также хотел бы отсортировать полученный результат имен драгоценных камней в алфавитном порядке.Ценится

class GemStones
  # input variables
  name = ""
  color = ""
  price = 0
  gemstoneNumber = 0


  # output variable
  gemstoneNumber = 0

  # processing
  print "How many gemstones do you want to enter? "
  gemstoneNumber = gets

  print "What is the name of the gemstone? "
  name = gets

  print "What is the color of the gemstone? "
  color = gets

  print "What is the price of the gemstone? "
  price = gets



  puts " You entered #{gemstoneNumber} The name is #{name}, the color is #{color} and price is
  $ #{price}"



end

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Вы также можете попробовать это.

def gem_stones num
  @gem_stones = []
  num.times do |a|
    print "Enter the name of gemstone #{a+1} "
    name=gets.chomp
    print "Enter the color of gemstone #{a+1} "
    color = gets.chomp
    print "Enter the price of gemstone #{a+1} "
    price = gets.chomp.to_f
    @gem_stones.push({name: name, color: color, price: price})
  end
  puts @gem_stones.sort_by {|a| a[:name]}.map{|gem| "Name: #{gem[:name]}, Color: #{gem[:color]}, Price: #{gem[:price]}"}.join("\n")
end

  puts "Ener the number of gem stones you want to enter?"
  num = gets.to_i
  gem_stones num
0 голосов
/ 24 сентября 2018

Вы не должны оборачивать код в class в первую очередь.В вашем коде нет ООП, поэтому класс также не нужен.Кроме того, gets возвращает строку, в то время как для number вам, вероятно, понадобится целое число.

Здесь будет [более или менее] рубиновая версия вашего кода:

print "How many gemstones do you want to enter? "
#                     ⇓⇓⇓⇓⇓ get rid of trailing CR/LF
#                           ⇓⇓⇓⇓ convert to integer
gemstoneNumber = gets.chomp.to_i

gemstones =
  1.upto(gemstoneNumber).map do |i|
    puts
    puts "Please enter data for the gemstone ##{i}:"

    print "What is the name of the gemstone? "
    name = gets.chomp # shave the trailing CR/LF off
    print "What is the color of the gemstone? "
    color = gets.chomp
    print "What is the price of the gemstone? "
    price = gets.chomp.to_f # convert to float

    # in Ruby we normally use hashes to store
    #   the named values
    {name: name, color: color, price: price}
  end

puts "You entered #{gemstoneNumber} gemstones. They are:"
gemstones.each do |gemstone|
  puts "Name: #{gemstone[:name]}. " \
       "Color: #{gemstone[:color]}. " \
       "Price: $#{gemstone[:price]}."
end

В качестве альтернативы вы можете использовать класс вместо хеша для хранения информации о драгоценном камне.


Чтобы отсортировать драгоценные камни по имени:

puts "You entered #{gemstoneNumber} gemstones. They are:"
#         ⇓⇓⇓⇓⇓⇓⇓ HERE
gemstones.sort_by { |gemstone| gemstone[:name] }.each do |gemstone|
  puts "Name: #{gemstone[:name]}. " \
       "Color: #{gemstone[:color]}. " \
       "Price: $#{gemstone[:price]}."
end

Хорошая документацияперечисления можно найти в официальных документах ruby: https://ruby -doc.org / core / Enumerable.html # method-i-sort_by (и около того)

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