【问题标题】:Type Error - No implicit conversion from nil to integer - Creating a array类型错误 - 没有从 nil 到整数的隐式转换 - 创建数组
【发布时间】:2015-01-02 11:19:16
【问题描述】:

我是 Ruby 的新手。我正在尝试通过制作小程序来学习注意事项。这个程序有点多余,但我想更好地使用语言的语法。

无论如何,所以我正在尝试创建一个小程序,它会询问用户的人数。然后这个数量的人将引用数组的大小,然后程序将要求用户输入数组中每个元素的名称(所有这些都是“nil”值,因为新数组的元素将为空)。最后,我想将数组打印回控制台以查看已完成的元素。

但是,我收到一条错误消息,提示“第 10 行:发生类型错误。没有从 nil 到整数的隐式转换”。我的代码没有 100% 完成。我仍在尝试向其中添加更多内容,但我想先解决此错误,然后再开始执行此操作。有人愿意帮助我吗?

这是代码

def Array_Maker 
  puts "How many people would you like to enter? : "
    num = gets.chomp.to_i

    nameArray = Array.new(num)

  puts "\nEnter the names of the people you wish to add: "

    nameArray.each do |x|
    nameArray[x] = gets.chomp.to_s
  end

    nameArray.each do |x| 
      puts x
  end
end  

Array_Maker()

我可能做错了,但我正在尝试......

【问题讨论】:

  • 你可以把gets.chomp.to_i写成gets.to_i,因为gets.chomp是一个字符串,gets.chomp.to_s中的.to_s没有效果。

标签: ruby arrays type-conversion user-input


【解决方案1】:

nameArray.each do |x| 行遍历数组,x 设置为数组每个索引处的

更好的方法可能是使用map 方法构建数组。像这样的:

def array_maker 
  puts "How many people would you like to enter? : "
    num = gets.chomp.to_i
  puts "\nEnter the names of the people you wish to add: "

  nameArray = num.times.map do
    gets.chomp.to_s
  end

  nameArray.each do |x| 
    puts x
  end
end  

array_maker()

【讨论】:

  • 啊啊啊...所以你就是这样做的。我似乎并没有走得太远。非常感谢!
【解决方案2】:

nameArray.each do |x| 在这个循环中,x 被赋予了数组的值nil

试试这个。

for i in 0..num do
  nameArray[i] = gets.chomp.to_s
end

【讨论】:

  • 我将尝试这段代码以更好地理解。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-26
  • 2014-04-03
  • 2020-01-02
  • 2023-04-02
  • 1970-01-01
相关资源
最近更新 更多