2017-02-15 6 views
0

Так что я не понимаю, почему при печати var Он печатает список из 50 элементов бесконечно. Я парень Java, поэтому, возможно, я что-то упустил. Я пытаюсь получить список строк по строкам и прочитать их в массиве. Хотите отсортировать их после, но не можете пройти мимо бесконечного цикла элементов списка.ruby ​​help отладка с бесконечным циклом от ввода текстового файла

puts "Hello, Ruby!"; 
    #Declare variable for list 
    var1 = [50] 

    #Read in words 
    #opening file 
    count = 0; 

    while count < 50 
     File.open("text.txt", "r") do |f| 
     f.each_line do |line| 
     var1[count] = line 
     count += 1 
     end 

    end 
    puts "hey guys" 
    puts var1 

    end 
+0

Ничего. Код работает очень хорошо, мой список должен начинаться с 49. – MrTumble

+0

Обратите внимание, что 'var1 = [50]' не создает массив длиной 50 в ruby, он создает массив с одним элементом в нем, и этот элемент является Fixnum 50 Как упоминает @tadman, вам нужно всего лишь сделать var1 = [] 'as: []' является псевдонимом для Array.new, но никто не использует это, кроме случаев, когда они хотят передать args в .new. Вы можете указать длину при использовании .new, но редко приходится это делать. – kernelsmith

ответ

0

Вот более рубин способ решения этой проблемы:

puts "Hello, Ruby!" 

array = [ ] 

while (array.length < 50) 
    File.open("text.txt", "r") do |f| 
    f.each_line do |line| 
     array << line.chomp 
    end 
    end 
end 

# Trim to the first 50 lines 
array = array.first(50) 

Обратите внимание, что ; не предполагается использовать после заявлений. Это разрешено, если вам нужно разделить вещи для написания более минимального кода, но даже это не рекомендуется. Обычно он зарезервирован для крошечных однострочных линий, например, таких как class X; end.

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