как выбрать элемент из массива по значению, полученному от входного пользователя (получает) - PullRequest
0 голосов
/ 26 февраля 2019

enter code here Добрый вечер всем, я хочу, чтобы пользователь написал start_station из Red_line

, например, в этом Сценарии

"Устанавливаем стартовую станцию" "Park Street" вы пройдетеЭти станции Южный вокзал, Парк-стрит, Кендалл, Центральный.общее количество станций: 4.

проблема в

, когда я пытаюсь сделать так, чтобы пользователь ввел значение, которое не работает (например, то, что вы видите в start_station и str , но когда я делаю это, не выбирая, чтобы работать просто отлично, как то, что вы не видите в start_station

Надеюсь, это достаточно ясно,спасибо за ваше время

subway =
 {
     "Red_line":["South Station","Park Street","Kendall","Central","Harvard","Porter","Davis","Alewife"]
}

puts"put ur start Station "
 sta = gets.chomp.to_s #<<==== this my attempted to use sta to make it like input  user
puts sta

start_station = subway[:Red_line].index(sta) # <<=== you can see that I put sta as index of subway array
puts start_station

end_station = subway[:Red_line].index("Central")

total_point_in_redLine = subway[:Red_line][start_station..end_statio] #name of points
total_number_in_redLine = subway[:Red_line][start_station..end_statio].length #number of station

puts "you will pass these Stations"
puts total_point_in_redLine
puts "total number of Stations is "
puts total_number_in_redLine

1 Ответ

0 голосов
/ 26 февраля 2019
# DEFINE SUBWAY
subway =
 {
     "Red_line":["South Station","Park Street","Kendall","Central","Harvard","Porter","Davis","Alewife"]
}

# GET START STATION FROM USER
puts"put ur start Station "
sta = gets.chomp.to_s 
puts sta

# GET START STATION INDEX
start_station = subway[:Red_line].index(sta)

# GET END STATION INDEX
end_statio = subway[:Red_line].index("Central")

# BUG: 
# THIS ONLY WORKS IF END STATION IS AFTER START
# SO ANY STATION AFTER CENTRAL IS A BUG
total_point_in_redLine = subway[:Red_line][start_station..end_statio] 
total_number_in_redLine = subway[:Red_line][start_station..end_statio].length 

puts "you will pass these Stations"
puts total_point_in_redLine
puts "total number of Stations is "
puts total_number_in_redLine

Ошибка связана с тем, что диапазон [start_station..end_statio], используемый для доступа к значениям в массиве subway[:Red_line], должен переходить от низкого к высокому, поэтому первое значение в диапазоне не может быть выше последнего.Когда start_station равно 5, а end_station равно 3, диапазон равен subway[:Red_line][5..3], и вам нужно, чтобы оно было обращено subway[:Red_line][3..5].

Чтобы исправить эту ошибку, вы можете использовать условие

if start_station <= end_statio
  total_point_in_redLine = subway[:Red_line][start_station..end_statio] 
  total_number_in_redLine = subway[:Red_line][start_station..end_statio].length 
else 
  total_point_in_redLine = subway[:Red_line][end_statio..start_station] 
  total_number_in_redLine = subway[:Red_line][end_statio..start_station].length 
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...