3

注意:我是 Ruby 的新手。

问题:如何让 print3 使用 until 循环打印出数组?这可能比我意识到的更简单,但我花了好几个小时试图解决以下问题。我能找到的只是'简单'直到循环示例。

我有一个方法(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

感谢您的任何帮助,您可以提供。

4

1 回答 1

3

正如@Tom Lord 提到的,你希望你的循环在什么时候停止i == students.length

数组的第一个元素是索引 0,第二个元素是索引 1。这意味着您的数组长度为 2,但索引 2 处没有元素,因为您要增加 1,因此您想在那里停止循环。

于 2018-11-08T16:03:51.457 回答