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
相关产品推荐
相关产品推荐

