#ruby #arrays #hash
#ruby #массивы #хэш
Вопрос:
Я пытаюсь составить список учащихся с их средним баллом, используя массив и хэш. Я также использую gets.chomp для ввода этого массива пользователем, чтобы учитель мог добавлять в эту программу. Проблема, с которой я сталкиваюсь, заключается в том, что каждый раз, когда я добавляю нового ученика, он заменяет старый. Что я делаю не так?
loop do
@students = []
puts "What is the student's name?"
@name = gets.chomp
puts "What is the students GPA?"
@gpa = gets.chomp.to_f
def add_students
@students << {:name => @name, :gpa => @gpa}
end
add_students
puts @students
end
Комментарии:
1. Невозможно воспроизвести. В нем есть синтаксическая ошибка.
Ответ №1:
Вы неправильно диагностировали свою проблему. Дело не в том, что каждое добавление заменяет последнее… Вы сбрасываетесь @students
в пустой массив в начале каждой итерации вашего цикла.
Итак, да, @students
всегда будет только самый последний добавленный ученик, потому что ваш цикл создает пустой массив, добавляет в него ученика, печатает его, затем выбрасывает и создает новый пустой массив.
Это…
loop do
@students = []
Должно быть так…
@students = []
loop do
… так что ваш @students
массив создается один раз, вне цикла.