如何将'gets'输入放入数组中?

4
这里是一个正在学习 Ruby 的初学者,目前正在学习这个教程,并且正在做以下练习:编写一个程序,要求我们输入任意数量的单词(每行一个单词,直到我们在空行上仅按 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

我已经花了几个小时来调整这个。为了防止我的笔记本因为沮丧而损坏,我正在休息。有没有更有经验,可能更有耐心的人能指出我的错误?


1
缩进是你的好朋友... - Platinum Azure
@Platinum:然后一个Java程序员使用了四个空格进行缩进。有时候好事情也会过度! - Andrew Grimm
哈。其实大部分时间我都是自己打四个空格!(不过这里没打。)在HTML中我通常只打两个空格。 - Platinum Azure
7个回答

7
请记住,每次使用gets方法都会要求用户输入。在您的代码中的以下几行:

array = [gets]
yn = gets.chomp

您实际上是在两次请求输入。相反,将用户输入存储在某个地方(例如数组中,见下文),并获取存储的值而不是两次询问用户。

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

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

1
唯一的问题是数组的最后一个项目将始终为“no”。如果您不想要那个“no”,可能需要使用array.pop。 - Charles Caldwell

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代码的提示,请参阅如何调试Ruby脚本?


感谢你的周到回答,安德鲁。 - Meir.r

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

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

"<<" 将 yn 追加到您的数组中。(我使用 print 的唯一原因是它将光标放在问号旁边,而不是下一行。没有其他原因)


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!!!

0

这是我编写这个程序的方法:

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

0

从控制台读取“数组”的另一种方法可能是:

1: print “enter the values: ”
2: a = gets.chomp # input: “tom mark rosiel suresh albert”
3: array = a.split(‘ ‘) # .split() method return an array
4: p array # ["tom, "mark, "rosiel", "suresh", "albert"]

now, lets say you want an array of integers, all you have to do is:

# input “1 2 3 4 5″
3: array = a.split(‘ ‘).map{ |value| value.to_i }
4: p array # [1, 2, 3, 4, 5]

the clue here is to use a standard separator in order to use the .split() function.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接