2009-12-13 7 views
0

Espérons que quelque chose de moins newbish que mon dernier ...Ruby: "dans` <= ': comparaison des Fixnum avec Array a échoué (ArgumentError)"

Quoi qu'il en soit, je fais un peu de codage sur une petite application qui simplifie les nombres jusqu'aux nombres premiers, principalement pour aider avec de petites choses comme les devoirs.

Cependant, une méthode particulière me donne l'erreur mentionnée dans le titre:

def get_simps(num) 
    curr = 2 
    print("Working...") 
    while (curr <= num) 
    #If they divide cleanly, then it's a simplified form 
    if (num % curr == 0) 
     res = [curr, num/curr] 
     break 
    end 
    curr += 1 
    end 
    print("\n") 
    return res  
end  

Si l'argument num est fourni par cette déclaration:

print("Insert number here: ") 
num = gets().chomp().to_i() 

Rendant ainsi l'erreur bizarre : pourquoi dit-on que je compare un Fixnum et un ARRAY? J'ai également fait ceci:

if (num.class() == curr.class()) 
print "Cheese" 
end 

et il a imprimé le fromage. Pourquoi la raison de l'erreur, alors?

+0

Copypasting dans la CISR et appeler avec 'get_simps (gets(). Chomp(). To_i()) 'ne me donne pas d'erreur (bien que cela donne de mauvais résultats: get_simps (15000) => [2, 7500] – Tordek

+0

Le code que vous avez posté fonctionne bien pour moi. Faites-vous quelque chose comme' get_simps (get_simps (20)) '? –

+0

Aussi," faux "puisque je m'attendais à ce qu'il renvoie une factorisation en nombres premiers du nombre – Tordek

Répondre

1

Le code tel que publié ne semble pas devoir donner l'erreur décrite sauf si vous l'alimentez par inadvertance dans un tableau.

Vous pourriez vouloir regarder la fonction de divmod(), qui pourrait nettoyer quelque peu la boucle intérieure. Et vous allez effectuer beaucoup de divisions entières inutiles si votre plus petit facteur premier est grand.

Ce n'est pas la réponse que vous cherchez, mais une solution de choix du facteur Ruby particulièrement élégant se trouve here

+0

Merci pour la suggestion. J'ai réécrit tout l'algorithme (crap-o-rithm) à partir de zéro, et ça semble aller pour la performance. – new123456