当我有一个 elsif 语句时,代码没有 运行

Code doesn't run when I had one more elsif statement

任何人都可以向我解释为什么当我有第二个 elsif 语句时我的代码没有 运行 吗?我确信这很简单,但我已经完成了几次,重新写代码还是没能解决bug。它只会在第 25 到 30 行出现并说

时出错

undefined method`[]' on line 35

但是如果我再次运行,这个错误会变成别的东西。

所以这会影响 line_three 作为测试,我尝试将“Southern Cross”作为起始位置,将“Windsor”作为目的地。

这是我收到的错误消息:

Traceback (most recent call last):
pt_planner.rb:35:in `<main>': undefined method `[]' for nil:NilClass (NoMethodError)

另一个是:

Traceback (most recent call last):
pt_planner.rb:33:in `<main>': undefined method `-' for nil:NilClass (NoMethodError)

希望此编辑对您有所帮助

require 'pry'

line_one = ["flinders street", "richmond", "east richmond", "burnley", "hawthorn", "glenferrie"]
line_two = ['Flagstaff', 'Melbourne Central', 'Parliament', 'Richmond', 'Kooyong', 'Tooronga']
line_three = ['Southern Cross', 'Richmond', 'South Yarra' ,'Prahran' 'Windsor']

#1 where would you like to go capture input
puts "what is your starting location?"
user_input_1 = gets.chomp
puts "what is your end location"
user_input_2 = gets.chomp


if line_one.include?(user_input_1) == true and 
    line_one.include?(user_input_2) == true
    origin_index = line_one.index(user_input_1)
    destination_index = line_one.index(user_input_2) 
    route = line_one
elsif  
    line_two.include?(user_input_1) == true and 
    line_two.include?(user_input_2) == true
    origin_index = line_two.index(user_input_1)
    destination_index = line_two.index(user_input_2)
    route = line_two
elsif
    line_three.include?(user_input_1) == true and
    line_three.include?(user_input_2) == true
    origin_index = line_three.index(user_input_1)
    destination_index = line_two.index(user_input_2)
    route = line_three
end

stops = destination_index - origin_index

puts "origin: #{route[origin_index]}\ndestination: #{route[destination_index]}\n#{route.slice(origin_index +1, stops)}\n stops total: #{destination_index - origin_index}"

binding.pry

在您的 line_three 数组中,您忘记了 'Prahran''Windsor' 之间的逗号。因此,Ruby 将其解析为字符串延续,并在此处添加单个元素作为 'PrahranWindsor'

因此,您的 ifelsif 条件中的 none 匹配。因此,您在任何分支上设置的变量的注释将被设置,而不是被隐式初始化为 nil。当您假设这些变量稍后会在您的程序中设置时,事情就会中断。

要解决此问题,您应该首先修复 line_three 数组的定义。

您还应该添加代码来处理 none 个查询匹配的情况。在这里,您可以添加一个最终的 else 分支,例如显示一条错误消息并要求用户重试。

您试图在错误的数组中搜索

改变

destination_index = line_two.index(user_input_2)

destination_index = line_three.index(user_input_2)

另外你不需要和true比较。 include?returnstrue或者false,就够了。最好使用 && 而不是 and。并将条件放在一行 elsif

您可以像这样重构以检查数组中的两个值

([user_input_1, user_input_2] - line_three).empty?