当我有一个 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'
。
因此,您的 if
或 elsif
条件中的 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?
任何人都可以向我解释为什么当我有第二个 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'
。
因此,您的 if
或 elsif
条件中的 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?