Сложность размещения информации и извлечения информации из массива - PullRequest
0 голосов
/ 26 апреля 2019

Я создаю программу, которая создает запись для собаки, которая имеет атрибуты (идентификатор, год рождения и имя). Я должен использовать массивы для хранения атрибутов 3 собак, а затем распечатать их в терминал

require './input_functions'




class Dog
  attr_accessor :id, :breed, :year_born, :name

  def initialise (id, breed, year_born, name)
    @id = id
    @breed = breed
    @year_born = year_born
    @name = name
  end
end


# Complete the missing code below

# Note: If your tasks requires outputting a floating point number you may wish to use the following:
# print out my_variable with 2 decimal places:
# printf("$%.2f\n", my_variable)
def read_dog()
  puts "Enter the ID of your dog"
  $dog_id = gets.to_s
  puts "Enter the Breed of your dog"
  $dog_breed = gets.to_s
  puts "Enter the birth year of your dog"
  $dog_year_born = gets.to_s
  puts "Enter the name of your dog"
  $dog_name = gets.to_s

end

def display_dog
  puts $dog_id + "The dog ID is an Integer which is unique to your dog"
  puts $dog_breed + "The dog breed is a String which defines the ancestors of your dog"
  puts $dog_year_born + "The year born is an Integer which contains what year your dog was born"
  puts $dog_name + "The dog name is a String which contains what your dog's name is"
end

def read_dogs
  dogs = Array.new
  index = 0
  while (index < 3)
    dogs << read_dog[index]
    index = index + 1
  end
  return dogs
end

def display_dogs(dogs)

  index = 0
  while (index < 3)
    dogs[display_dog.to_i]
  index = index + 1
  end

end



def main
    dogs = read_dogs
  display_dogs(dogs)
end


main

Результат, на который я надеялся, был после того, как программа 3 раза просила вас ввести всю информацию, чтобы затем она отображала всю эту информацию обратно пользователю. Вместо этого происходит то, что отображается только последний введенный набор данных, и он отображается три раза. Очевидно, это как-то связано с тем, как я храню или извлекаю данные из массива, но я не могу понять, что это такое.

Ответы [ 2 ]

0 голосов
/ 27 апреля 2019

Я бы сделал что-то вроде этого, он делает то, что должен делать.

class Dog
    attr_accessor :id, :breed, :year_born, :name

    def initialize
        puts "Enter the ID of your dog"
        @id = gets.to_s
        puts "Enter the Breed of your dog"
        @breed = gets.to_s
        puts "Enter the birth year of your dog"
        @year_born = gets.to_s
        puts "Enter the name of your dog"
        @name = gets.to_s
    end

    def self.ask_for_dogs
        all_dogs = []
        3.times do
            all_dogs << Dog.new
        end
        all_dogs
    end

    def self.display(dogs)
        dogs.each do |dog|
            puts "Id: #{dog.id}"
            puts "Name: #{dog.name}"
            puts "Breed: #{dog.breed}"
            puts "Year born: #{dog.year_born}\n"
        end
    end
end

dogs = Dog.ask_for_dogs
Dog.display(dogs)

Это сохраняет объекты, которые могут быть распечатаны одновременно, как показано выше, путем доступа к атрибутам объекта dog.

0 голосов
/ 26 апреля 2019

Прежде всего вы должны вернуть некоторое значение из метода read_dog

def read_dog()
  puts "Enter the ID of your dog"
  $dog_id = gets.to_s
  puts "Enter the Breed of your dog"
  $dog_breed = gets.to_s
  puts "Enter the birth year of your dog"
  $dog_year_born = gets.to_s
  puts "Enter the name of your dog"
  $dog_name = gets.to_s

  return [$dog_id, $dog_breed, $dog_year_born, $dog_name]
end

Позвольте мне проинформировать вас о других вещах, так как это только печать последней информации. Кстати, я не вижу никакого использования кода класса Dog в вашем фрагменте в данный момент

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