Давайте попробуем объяснить:
Вы определяете массив
grades = [88,99,73,56,87,64]
и подготавливаете переменную для хранения суммы:
sum = 0
grades.length
равно 6(в массиве 6 элементов), (grades.length - 1)
равно 5.
с 0.upto(5)
, в котором вы выполните цикл от 0 до 5, loop_index
будет 0, затем 1 ...
Первый элемент массива - grades[0]
(индекс в массиве начинается с 0).Вот почему вы должны вычесть 1 из числа элементов.
0.upto(grades.length - 1) do |loop_index|
Добавьте значение loop_index к сумме.
sum += grades[loop_index]
end
Теперь вы зациклились на каждом элементе и получили сумму всехэлементы массива.
Вы можете вычислить среднее значение:
average = sum/grades.length
Теперь вы записываете результат в стандартный вывод:
puts average
Это было синтаксис, не похожий на рубиновый .Как и в Ruby, вы бы сделали это так:
grades = [88,99,73,56,87,64]
sum = 0
grades.each do |value|
sum += value
end
average = sum/grades.length
puts average
Приложение на основе комментария Марка-Андреса:
Вы также можете использовать inject
, чтобы избежать определения начальной суммы:
grades = [88,99,73,56,87,64]
sum = grades.inject do |sum, value|
sum + value
end
average = sum / grades.length
puts average
Или даже короче:
grades = [88,99,73,56,87,64]
average = grades.inject(:+) / grades.length
puts average