¿Alguien puede explicarme por qué mi código no se ejecuta cuando tengo mi segunda declaración de elsif ? Estoy seguro de que es algo simple, pero lo he repasado varias veces, escribí el código nuevamente y todavía no puedo resolver el error. Solo falla cuando las líneas 25 a 30 están y dice
método indefinido`[]' en la línea 35
pero este error cambiará a otra cosa si lo ejecuto de nuevo.
Así que esto está afectando a line_three como prueba. Estoy probando "Southern Cross" para la ubicación de inicio y "Windsor" para el destino.
Este es un mensaje de error que recibo:
Traceback (most recent call last): pt_planner.rb:35:in `<main>': undefined method `[]' for nil:NilClass (NoMethodError)otro es:
Traceback (most recent call last): pt_planner.rb:33:in `<main>': undefined method `-' for nil:NilClass (NoMethodError)Espero que esta edición ayude
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.pryIntentaste buscar en una matriz incorrecta
Cambio
destination_index = line_two.index(user_input_2)para
destination_index = line_three.index(user_input_2) Además, no necesita comparar con true . include? devuelve true o false , eso es suficiente. Es mejor usar && en lugar de and . Y poner condición en una línea con elsif
Puede refactorizar así para verificar que ambos valores estén en la matriz
([user_input_1, user_input_2] - line_three).empty?En su line_three Array, ha olvidado la coma entre 'Prahran' y 'Windsor' . Como tal, Ruby analiza esto como una continuación de cadena y agrega un solo elemento como 'PrahranWindsor' aquí.
Con eso, ninguna de sus condiciones if o elsif coincide. En consecuencia, se establecerá la nota de las variables que establezca en cualquiera de las ramas y, en su lugar, se inicializará implícitamente como nil . Como asume que estas variables se establecerán más adelante en su programa, las cosas se rompen.
Para solucionar esto, primero debe corregir la definición de su matriz line_three .
También debe agregar código para manejar el caso de que ninguna de sus consultas coincida. Aquí, podría agregar una rama else final que, por ejemplo, muestre un mensaje de error y le pida al usuario que intente nuevamente.