如何将“获取”输入放入数组中?

时间:2011-03-08 16:10:24

标签: ruby arrays

Ruby noob在这里学习绳索。我目前正在进行this tutorial并正在进行此练习:

  

让我们写一个要求我们的程序   输入尽可能多的单词(一个   每行一句话,一直持续到我们   只需在空行上按Enter键,   然后重复这些话   按字母顺序给我们。

我现在忽略了字母顺序部分。

这是我的代码:

puts 'Hi, do you need something sorted?'
yn = gets.chomp
while yn != 'no'
  puts 'What else?'
  array = [gets]
  yn = gets.chomp
end
puts 'Here\'s what you told me: ' +array.to_s

我已经调整了几个小时。为了防止我的笔记本电脑因挫败感而破坏我正在休息。任何有更多经验,可能更有耐心的人都可以指出我的错误吗?

6 个答案:

答案 0 :(得分:7)

请记住,每次gets是要求用户输入的方法时。在你的行上:

array = [gets]
yn = gets.chomp

你实际上要求输入两次。相反,将用户输入存储在某处(例如数组,见下文)并获取存储的值而不是向用户询问两次。

此外,array = [gets]用包含一个元素(用户输入)的数组替换现有数组。您永远不会在数组中构建用户输入。相反,在while循环之前初始化数组并在循环中使用<<

array = Array.new
...
while yn != "no"
  ...
  array << gets.chomp
  yn = array.last
  ...
end

答案 1 :(得分:2)

如果你遇到困难,你应该做的第一件事就是尝试更简单的事情。

而不是执行gets和循环,只需尝试做一个简单的gets

puts 'Hi, do you need something sorted?'
yn = gets.chomp

然后我会看到yn是否符合我的预期。

我要做的下一件事是,而不是多次循环,只需尝试一次

puts 'Hi, do you need something sorted?'
yn = gets.chomp
if yn != 'no'
  puts 'What else?'
  array = [gets]
  yn = gets.chomp
  STDERR.puts "array is #{array.inspect}"
  STDERR.puts "yn is #{yn.inspect}"
end

然后你会希望arrayyn都得到输入,这是没有意义的。

有关如何调试Ruby代码的更多提示,请参阅How do I debug Ruby scripts?

答案 2 :(得分:2)

我遇到了同样的问题。这是我结束的地方(我认为它符合问题的所有规范):

puts 'Type in as many words as you\'d like. When you\'re finished, press enter on an empty line'
array = []
input = ' '
while input != ''
  input = gets.chomp
  array.push input
end

puts
puts array.sort

答案 3 :(得分:1)

while yn != "no"
  array << yn
  print "What else? "
  yn = gets.chomp
end

“&lt;&lt;&lt;将yn附加到数组中。 (我使用print的唯一原因是因为它将光标放在问号旁边而不是下一行。没有其他原因)

答案 4 :(得分:1)

#encoding:utf-8

x = Array.new
puts "enter something:".capitalize
y = ''
while y !=#nill
  y = gets.chomp
  x.push y
end
x.delete ('')
x.compact
puts "You entered: " + x.sort.to_s
puts "Objects in array: " + x.size.to_s
 #made by ~Pick@chu!!!

答案 5 :(得分:0)

这是我如何完成这个程序:

array = [ ]
input = gets.chomp
while
  input != ''
  array.push input
  input = gets.chomp  
end
puts array
puts
puts array.sort