Руби время в пути - PullRequest
       8

Руби время в пути

0 голосов
/ 14 мая 2018

Я новичок в ruby, и мне трудно понять, как рассчитать случайное время в пути, пока оно не пройдет 1000 миль.До сих пор я не могу понять, почему он не выводит результаты, он просто остается за пользователем.Помогите пожалуйста

def travel_time()
    printf "Pick a vehicle: \n"
    printf "1.  Bicycle \n"
    printf "2.  Car \n"
    printf "3.  Jet Plane \n"
    puts "Choose 1-3: \n"
    vehicle = gets.chomp

  case vehicle
    when "1"
        #Bicycle: 5-15 miles per hour
        time = 0
        distance = 0
        until distance > 1000 do
         speed = Random.rand(5...15)
         distance = speed * 1
         time = time + 1
        end
        puts "The number of hours it took to travel 1000 miles was #{time} hours"
    when "2"
        #Car: 20-70 miles per hour
        time = 0
        distance = 0
        until distance > 1000 do
        speed = Random.rand(20...70)
        distance = speed * 1
        time = time + 1
        end
        puts "The number of hours it took to travel 1000 miles was #{time} hours"

    when "3"
        #Jet Plane: 400-600 miles per hour
        time = 0
        distance = 0
        until distance > 1000 do
        speed = Random.rand(400...600)
        distance = speed * 1
        time = time + 1
        end
        puts "The number of hours it took to travel 1000 miles was #{time} hours"
    end
end
travel_time

Ответы [ 3 ]

0 голосов
/ 14 мая 2018

Вы на самом деле не суммируете расстояние - расстояние никогда не будет увеличиваться после 1000

until distance > 1000 do
  speed = Random.rand(5...15)
  distance = speed * 1 # will never equal more than 15
  time = time + 1
end

Возможно, вы хотите

distance += speed * 1 # not sure why you're multiplying by 1 though
0 голосов
/ 14 мая 2018

Как комментарий стиля: не используйте операторы case в качестве потока управления, такие как операторы if / then. Просто используйте их для установки значений и переместите все остальное. Это может устранить много избыточного кода. Пример:

time = 0
distance = 0
until distance > 1000 do   
  speed = case vehicle
    when "1" then Random.rand(5...15)    #Bicycle
    when "2" then Random.rand(20...70)   #Car
    when "3" then Random.rand(400...600) #Plane
    end
  distance += speed * 1
  time = time + 1
end
puts "The number of hours it took to travel 1000 miles was #{time} hours"
0 голосов
/ 14 мая 2018

У вас здесь бесконечный цикл:

until distance > 1000 do
  speed = Random.rand(5...15)
  distance = speed * 1
  time = time + 1
end

Этот цикл никогда не закончится, потому что наибольшее значение, которое может получить distance, равно 15, поэтому я думаю, что вы хотите добавить к distance, а не заменить его; сын, попробуйте использовать += вместо =:

until distance > 1000 do
  speed = Random.rand(5...15)
  distance += speed * 1
  time = time + 1
end

То же самое касается всех циклов в каждом случае.

Как я могу сохранить максимальную скорость и вернуть ее в выписке, как я сделали?

Один из способов сделать это - добавить другую переменную (т.е. max_speed) и присвоить ей значение speed всякий раз, когда speed превышает max_speed:

time = 0
distance = 0
max_speed = 0

until distance > 1000 do
  speed = Random.rand(5...15)
  max_speed = speed if speed > max_speed
  distance += speed * 1
  time = time + 1
end

puts "The maximum speed was #{max_speed} miles per hour"

Другой способ - использовать массив (хотя я предпочитаю первый вариант):

speed = []

until distance > 1000 do
  speed << Random.rand(5...15)
  distance += speed.last * 1
  time = time + 1
end

puts "The maximum speed was #{speed.max} miles per hour"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...