2015-01-02 2 views
0

Я новичок в Ruby. Я пытаюсь выучить dos и don'ts, делая небольшие программы. Эта программа немного избыточна, но я хочу лучше себя с синтаксисом языка.Тип Ошибка - нет неявного преобразования из nil в integer - Создание массива

В любом случае, поэтому я пытаюсь создать небольшую программу, которая будет запрашивать у пользователя количество людей. Тогда количество людей будет ссылаться на размер массива, тогда программа попросит пользователя ввести имена для каждого элемента в массиве (которые ВСЕ будут «нулевыми» значениями, поскольку элементы нового массива будут пустыми). Наконец, я хотел бы распечатать массив на консоли, чтобы увидеть завершенные элементы.

Однако, я получаю сообщение об ошибке «Строка 10: TypeError произошла. Неявное преобразование из нуля в целое». Мой код не выполнен на 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() 

Я, вероятно, делать все это неправильно, но я стараюсь ...

+0

Вы можете написать 'gets.chomp.to_i' как' gets.to_i' и так 'gets.chomp' является строкой, то' '.to_s' в gets.chomp.to_s' имеет нет эффекта. –

ответ

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() 
+0

Ahhhh ... Так вот как вы это делаете. Я не выгляжу слишком далеко. Спасибо огромное! – PrimRock

1

nameArray.each do |x| В этом цикле x дается значения массива, который nil

Попробуйте это.

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

Я попробую этот код, чтобы лучше понять. Спасибо огромное! – PrimRock

Смежные вопросы