Ruby 直到循环:nil:NilClass 的未定义方法“[]”(NoMethodError)
Ruby Until-Loop: undefined method `[]' for nil:NilClass (NoMethodError)
注意:我是Ruby的新手。
问题:如何使用 until 循环让 print3 打印出数组?
这可能比我意识到的更简单,但我花了好几个小时试图解决以下问题。我能找到的只有 'simple' until loop examples.
我有一个方法 (print3),我特别需要使用直到循环。 print3 从 input_students 方法中提取一个数组。两种方法都在下面。
我在 irb 中得到以下信息 - directory.rb:30:in ``print3``: undefined method
[]for nil:NilClass (NoMethodError).
第30行指的是
puts "#{i+1} #{students[i][:name]} (#{students[i][:cohort]}
cohort)"
我的代码:
def input_students
puts "Please enter the names of the students"
puts "To finish, just hit return twice"
students = []
name = gets.chomp.downcase
while !name.empty? do
students << {name: name, cohort: :november}
puts "Now we have #{students.count} students"
name = gets.chomp.downcase
end
students
end
def print3(students)
i = 0
until i > students.length
puts "#{i+1} #{students[i][:name]} (#{students[i][:cohort]}
cohort)"
i += 1
end
end
感谢您提供的任何帮助。
正如@Tom Lord 提到的,您希望循环在 i == students.length
时停止
数组的第一个元素是索引 0,第二个元素是索引 1。这意味着您的数组长度为 2,但索引 2 处没有元素,因为您要递增 1,所以您想停止循环那里。
注意:我是Ruby的新手。
问题:如何使用 until 循环让 print3 打印出数组? 这可能比我意识到的更简单,但我花了好几个小时试图解决以下问题。我能找到的只有 'simple' until loop examples.
我有一个方法 (print3),我特别需要使用直到循环。 print3 从 input_students 方法中提取一个数组。两种方法都在下面。
我在 irb 中得到以下信息 - directory.rb:30:in ``print3``: undefined method
[]for nil:NilClass (NoMethodError).
第30行指的是
puts "#{i+1} #{students[i][:name]} (#{students[i][:cohort]}
cohort)"
我的代码:
def input_students
puts "Please enter the names of the students"
puts "To finish, just hit return twice"
students = []
name = gets.chomp.downcase
while !name.empty? do
students << {name: name, cohort: :november}
puts "Now we have #{students.count} students"
name = gets.chomp.downcase
end
students
end
def print3(students)
i = 0
until i > students.length
puts "#{i+1} #{students[i][:name]} (#{students[i][:cohort]}
cohort)"
i += 1
end
end
感谢您提供的任何帮助。
正如@Tom Lord 提到的,您希望循环在 i == students.length
数组的第一个元素是索引 0,第二个元素是索引 1。这意味着您的数组长度为 2,但索引 2 处没有元素,因为您要递增 1,所以您想停止循环那里。