2017-02-15 4 views
0

Donc, je ne comprends pas pourquoi quand j'imprime var Il imprime la liste des 50 éléments infiniment. Je suis un gars de Java alors peut-être qu'il me manque quelque chose. J'essaie d'obtenir une liste de chaînes ligne par ligne et les lire dans le tableau. Vous voulez les trier après, mais ne pouvez pas passer la boucle infinie d'éléments de la liste.ruby ​​aide débogage avec boucle infinie de l'entrée du fichier texte

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

Peu importe. Le code fonctionne très bien ma liste devrait commencer à 49. – MrTumble

+0

notez que 'var1 = [50]' ne crée pas un tableau de longueur 50 dans ruby, il crée un tableau avec un élément, et cet élément est le Fixnum 50 Comme le mentionne @tadman, il suffit de faire 'var1 = []' car '[]' est un alias pour Array.new, mais personne ne l'utilise sauf quand il veut passer des arguments à .new. Vous pouvez spécifier une longueur en utilisant .new mais il est rarement nécessaire de le faire. – kernelsmith

Répondre

0

est ici une façon plus Ruby d'aborder ce problème:

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) 

Notez que ; n'est pas censé être utilisé après les déclarations. C'est autorisé si vous avez besoin de séparer les choses dans le but d'écrire un code plus minimal, mais même cela est déconseillé. Normalement, il est réservé pour les minuscules one-liners, des choses comme class X; end à titre d'exemple.