Прочитать ввод от пользователя на основе начального ввода - PullRequest
0 голосов
/ 05 мая 2020

Я написал следующий код в Ruby, который принимает данные от пользователя, касающиеся самолета и деталей полета, и отображает вводимые пользователем данные в виде массива в терминале. Однако программа читается в четыре раза. Какие изменения я могу внести, чтобы программа подсказывала пользователю, в скольких плоскостях они хотят ввести, а затем прочитать это количество раз? Например, если пользователь вводит 3, программа считывает ввод 3 раза. Я также получаю следующую ошибку:

Traceback (последний вызов последний): 2: from plane.rb: 68: in <main>' 1: from plane.rb:65:in main 'plane.rb: 56: in print_planes': undefined method length' для ноль: NilClass (NoMethodError)

require './input_functions'
class Plane
    attr_accessor :id, :number, :origin, :destination

    def initialize (id, number, origin, destination)
        @id=id
        @number = number
        @origin = origin
        @destination = destination
    end 
end 
def read_plane()

    plane_id = read_integer("Enter plane id:")
    plane_number = read_string("Enter flight name:")
    plane_origin = read_string("Enter origin airport:")
    plane_destination = read_string("Enter destination airport:")
    plane = Plane.new()
    plane.id = plane_id
    plane.number = plane_number
    plane.origin = plane_origin
    plane.destination = plane_destination   
    return plane
end

def read_planes()
    planes=Array.new()
    count=0
    while (count<4)
        planes<<read_plane()
        count+=1
    end     
end

def print_plane(plane)
    puts ("Plane id "+plane.id)
    puts ("Flight "+plane.number)
    puts ("Origin "+plane.origin)
    puts ("Destination "+plane.destination)

end

def print_planes(planes)
    index = 0
    while (index<planes.length)
        puts planes[index]
        index+=1
    end 

end

def main()
    planes = read_planes()
    print_planes(planes)
end

main()

1 Ответ

0 голосов
/ 05 мая 2020
def read_planes()
  planes=Array.new()
  planes_count = read_integer("How many planes do you want to enter?")
  count=0
  while (count<planes_count)
    planes<<read_plane()
    count+=1
  end     
end

Это исправление, и оно должно работать, но это не совсем ruby -i sh способ решить эту проблему. Могу я предложить .times и .map?

def read_planes
  planes_count = read_integer("How many planes do you want to enter?")
  planes_count.times.map do
    read_plane
  end  
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...