【问题标题】:Ruby - problems with user input to integer arrayRuby - 用户输入到整数数组的问题
【发布时间】:2011-03-20 21:32:36
【问题描述】:

我正在尝试接受两个整数的输入,用空格分隔:3 5 并将其保存到整数数组中。我这样做了 3 次,但我无法将它从字符串转换为整数。这是我的循环:

for i in 1..3
    puts "What is point " + i.to_s + " ?"    # asks for input
    s.push gets.split(" ")
end

那么,我想拥有

if s[1][0] - s[0][0] = 0
    blah blah blah
end

数组s当前看起来像

------------
| "1"  "2" |
| "3"  "4" |
| "5"  "6" |
------------

我希望它看起来像

--------
| 1  2 |
| 3  4 |
| 5  6 |
--------

我尝试过gets.split(" ").map { |s| s.to_i }gets.split(" ").collect{|i| i.to_i},但我意识到我应该在这里问人。

我刚刚开始学习 Ruby,所以如果您不介意对解决方案进行简短说明,我将不胜感激 :)

谢谢!

注意:这与this question 几乎相反,我确实尝试在循环之后使用.collect.map,但仍然不起作用。

【问题讨论】:

  • s 中存储了什么?如果您使用的是旧版本的 ruby​​,您应该尝试使用 << 而不是 push,例如:s << gets.split(' ')。您的代码可以在我的计算机上按您希望的方式运行。
  • 当前存储的是我想要的数组,但存储为字符串。我正在使用 Ruby 1.9.1。 (我还编辑了原始问题)
  • 我也在使用 1.9.1,而您的确切代码(使用 gets.split(" ").map { |s| s.to_i } 而不仅仅是 gets.split(" ") 正在生成整数数组。
  • 我现在可以使用了,谢谢。那很奇怪。我想在我可能拥有map { |i| i.to_i } 之前,这会导致它由于某种原因而失败吗?我以前收到undefined method 'to_i' for ["1", "2"]:Array
  • @phoffer:我不这么认为,也许吧。

标签: ruby arrays multidimensional-array type-conversion


【解决方案1】:

好的,抱歉,我刚刚看到了错误。我不敢相信我错过了。

在您的if 语句中,您使用的是= 而不是=== 分配事物,== 比较事物。一个完整的工作程序可能如下所示:

s = []
for i in 1..3
    puts "What is point " + i.to_s + " ?"    # asks for input
    s.push gets.split(" ").map {|x| x.to_i }
end
if s[1][0] - s[0][0] == 0 # notice the '=='.
    puts 'It worked!'
end

【讨论】:

  • 在我提出问题后,我确实解决了这个问题,我意识到我是多么愚蠢。我有一些 puts 在它们之间显示它失败了,所以实际的错误与那个是分开的。不过感谢您的帮助!
【解决方案2】:

我觉得你的回答不错。您可以将 s.push 替换为 s

s

另外,你可以替换

提出“点是什么” + i.to_s + “?”

提出“#{i} 点是什么?”

【讨论】:

  • "canine" 注意如果 a = 'ca' 和 b = 'nine',c = a "canine",还有 a => "canine",这可能不是你想要的。 ["quick", "brown", "fox"]
  • 哦,好的。谢谢,这真是太好了!如果那不是我想要的,我会改用+。很高兴知道这些小事。
猜你喜欢
  • 2014-04-11
  • 2017-09-30
  • 2019-03-05
  • 1970-01-01
  • 1970-01-01
  • 2016-10-05
  • 1970-01-01
  • 2021-05-14
  • 1970-01-01
相关资源
最近更新 更多