You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby随机旅行时间计算程序无输出问题求助

问题分析与修复方案

嘿,我一眼就看到你卡在哪了——程序不是停在输入环节,而是输入后陷入了无限循环,根本跑不到输出那一步!咱们来掰扯清楚问题出在哪:

核心错误原因

你代码里的 distance = speed * 1 这行逻辑完全错了:每次循环都会把总里程distance重置为当前小时的行驶里程,而不是把当前里程加到总里程里。举个例子,自行车每次只能跑5-15英里,总里程永远卡在这个范围,永远到不了1000英里,程序自然会一直循环下去,看不到任何输出。

修复后的完整代码

只需要把每个分支里的 distance = speed * 1 改成累加逻辑 distance += speed(或者写全 distance = distance + speed),总里程就会逐步增长,直到超过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 # 修正为累加总里程
      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 # 修正为累加总里程
      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 # 修正为累加总里程
      time = time + 1
    end
    puts "The number of hours it took to travel 1000 miles was #{time} hours"
  end
end

travel_time

可选的代码优化建议

你这三段循环逻辑几乎一模一样,完全可以抽成一个独立方法,减少冗余代码,以后维护也更方便:

# 抽离通用的计算逻辑
def calculate_travel_time(min_speed, max_speed)
  time = 0
  distance = 0
  until distance > 1000 do
    speed = Random.rand(min_speed...max_speed)
    distance += speed
    time += 1
  end
  time
end

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

  time = case vehicle
         when "1" then calculate_travel_time(5, 15)
         when "2" then calculate_travel_time(20, 70)
         when "3" then calculate_travel_time(400, 600)
         else
           puts "Invalid choice! Please pick 1-3."
           return # 非法输入直接退出方法
         end

  puts "The number of hours it took to travel 1000 miles was #{time} hours"
end

travel_time

内容的提问来源于stack exchange,提问作者Renato

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:43:51