2013-09-24 3 views
1

Я только начал изучать Ruby/Rails и пытаюсь написать программу, которая строит массив, а затем форматирует новый массив.Могу ли я построить массив с использованием цикла в Ruby?

Он работает до второго while, и, если у меня уже есть массив, вторая часть работает. Я что-то скрываю?

chap = [] 
page = [] 
lineWidth = 80 
x = 0 
n = chap.length.to_i 
puts 'chapter?' 
chapter = gets.chomp 
while chapter != '' 
    chap.push chapter 
    puts 'page?' 
    pg = gets.chomp 
    page.push pg 
    puts 'chapter?' 
    chapter = gets.chomp 
end 
puts ('Table of Contents').center lineWidth 
puts '' 
while x < n 
puts ('Chapter ' + (x+1).to_s + ' ' + chap[x]).ljust(lineWidth/2) +(' page ' + page[x]).rjust(lineWidth/2) 
x = x + 1 
end 

Благодарим за помощь!

+0

длина 'n' вычисляется до фактического построения массива chap, поэтому x == n == 0. Переместите' n = chap.length.to_i' после первого времени. Также вам не нужно to_i – mastaBlasta

+0

Как примечание о стиле, 'chapter! = ''' Не очень красиво. Лучше что-то вроде '! Chapter.empty?', Где вы сами тестируете 'chapter', а не сравниваете с другой строкой. 'x + = 1' также предпочтительнее' x = x + 1'. – tadman

ответ

3

Простой ошибка пилота: Вы назвали

n = chap.length.to_i 

слишком рано. Вы должны получить длину списка chap ПОСЛЕ того, как вы вкладываете в нее вещи. Переместите эту линию здесь:

... 
    puts 'chapter?' 
    chapter = gets.chomp 
end 
n = chap.length.to_i 

puts ('Table of Contents').center lineWidth 

и он отлично работает.

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