Как вы помещаете «получает» вход в массив? - PullRequest
4 голосов
/ 08 марта 2011

Руби нуб, здесь учатся веревки. В настоящее время я изучаю этого урока и работаю над этим упражнением:

Давайте напишем программу, которая просит нас введите столько слов, сколько мы хотим (одно слово в строке, продолжая, пока мы просто нажмите 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

Я подправил это несколько часов. Чтобы не дать ноутбуку сломаться из-за разочарования, я делаю перерыв. Может ли кто-нибудь с большим опытом и, возможно, большим терпением указать на мои ошибки?

Ответы [ 7 ]

7 голосов
/ 08 марта 2011

Имейте в виду, что каждый раз, когда вы gets - это метод, который запрашивает ввод у пользователя. На ваших линиях:

array = [gets]
yn = gets.chomp

Вы фактически запрашиваете ввод дважды. Вместо этого сохраните пользовательский ввод где-нибудь (например, массив, см. Ниже) и получите сохраненное значение, а не дважды спрашивайте пользователя.

Далее, array = [gets] заменяет существующий массив на массив, содержащий один элемент (пользовательский ввод). Вы никогда не создаете пользовательский ввод в массив. Вместо этого инициализируйте массив перед циклом while и используйте << в цикле:

array = Array.new
...
while yn != "no"
  ...
  array << gets.chomp
  yn = array.last
  ...
end
2 голосов
/ 04 июня 2013

У меня была такая же проблема. Вот где я оказался (я думаю, что он отвечает всем техническим требованиям вопроса):

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
2 голосов
/ 09 марта 2011

Если у вас возникли трудности с чем-то, первое, что вы должны сделать, это попробовать что-нибудь попроще.

Вместо того, чтобы делать 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

Тогда вы, надеюсь, поймете, что array и yn оба получают ввод, что не имеет смысла.

Дополнительные советы по отладке кода Ruby см. Как отлаживать скрипты на Ruby?

1 голос
/ 07 сентября 2011
#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!!!
1 голос
/ 08 марта 2011
while yn != "no"
  array << yn
  print "What else? "
  yn = gets.chomp
end

"<<" добавляет yn к вашему массиву.(Единственная причина, по которой я использовал <code>print, заключается в том, что он помещает курсор прямо рядом со знаком вопроса, а не на следующей строке. Никакой другой причины)

0 голосов
/ 23 апреля 2015

вот как я сделал эту программу:

array = [ ]
input = gets.chomp
while
  input != ''
  array.push input
  input = gets.chomp  
end
puts array
puts
puts array.sort
0 голосов
/ 26 февраля 2013

Еще один способ чтения «массивов» из консоли:

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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...