2009-04-11 7 views
1

Donc je fais un petit projet simple pour ma classe et pour une raison quelconque, je ne peux pas accéder à une valeur en utilisant une variable.Ruby arrays - ne peut pas accéder à la valeur

C'est ma classe: (Je rencontre des problèmes avec la méthode RenvoieQuestion, en particulier le tableau answerArray)

#Create random fact array 
class RandomFact 
    def initialize() 
     @randomNum = rand(5) 
    end 

    def getQuestion 
     randomNum = @randomNum 
     questionArray = Array.new 
     questionArray[0] = "Do you liek mudkipz?" 
     questionArray[1] = "Question2" 
     questionArray[2] = "Three" 
     questionArray[3] = "Reddit" 
     questionArray[4] = "4chan" 

     puts questionArray[randomNum] 
     return randomNum 
    end 

    def getAnswer(randomNum,answer) 
     answerArray = Array.new 
     answerArray[0] = "one" 
     answerArray[1] = "two" 
     answerArray[2] = "three" 
     answerArray[3] = "four" 
     answerArray[4] = "five" 

     return answerArray[randomNum] 
    end 

end 

C'est ma classe à la classe:

randomNum = cgi['randomNum'] 
    answer = cgi['answer'] 
    puts newQuestion.getAnswer(randomNum,answer) 

Maintenant, la chose est ce randomNum détient une valeur d'un formulaire précédent. Si j'imprime aléatoirement le nombre exact sous lequel je tire la valeur du formulaire, je l'obtiens.
si j'imprime randomNum à l'intérieur de la méthode getAnswer je l'obtiens.
Si j'imprime answerArray [0], j'obtiens une valeur.
Si j'imprime answerArray [randomNum] je n'ai rien.



Il est à peu près une copie exacte de la méthode de getQuestion d'en haut et que l'on travaille. Toute entrée?

+0

ne un 'p randomNum' et' p answer' afin que nous puissions voir les détails sur randomNum et réponse. FYI 'p obj' est l'équivalent de' puts obj.inspect' - il donne plus d'informations que 'puts obj.to_s' et est généralement plus utile pour le débogage. – rampion

Répondre

1

Le nombre aléatoire provient probablement d'une chaîne de votre CGI. Convertissez-le en entier en utilisant randomNum.to_i et vous serez défini.

+0

Non, j'avais essayé de le changer en utilisant int() plus tôt. J'ai juste essayé to_i et cela n'a pas fonctionné non plus. – Levi

0

Il doit s'agir de votre contribution. Quand je l'ai essayé en IRB, ça a marché pour moi.

>> new_q = RandomFact.new 
=> #<RandomFact:0x41028e74 @randomNum=2> 
>> new_q.getQuestion 
Three 
=> 2 
>> new_q.getAnswer(2, "") 
=> "three" 
+0

Je sais que c'est mon entrée, je ne sais pas ce qui ne va pas. J'ai essayé de convertir l'entrée pour m'assurer que c'est un int et ça ne marche toujours pas. L'entrée est là cependant, je peux l'imprimer je ne peux pas l'utiliser en conjonction avec le tableau pour une raison quelconque. – Levi

0

Je ne suis pas sûr de ce que vous êtes vraiment essayer de le faire, mais si vous êtes vraiment seulement essayer de faire ce que votre exemple montre, vous n'avez pas besoin d'être la création de classes et fonctions. Une seule série de questions et réponses fonctionnerait très bien.

QA = [ 
    ["What is the capital of Estonia?","Tallinn"], 
    ["How many times to 6 go into 18?","3"], 
    ["What have I got in my pocket?","The Ring"] 
] 

qnum = cgi["qnum"].to_i 
question = QA[qnum].first 
answer = QA[qnum].last 
+0

C'est pour une classe que je prends sur Ruby, donc nous devons faire un long chemin pour apprendre la langue. Mais oui, ce serait une façon idéale de le faire. – Levi

0

Est-ce que vous initialisez newQuestion quelque part? Dans l'exemple que vous avez donné, il sera nul. Quelques points d'information non pertinents à la question: vous n'avez pas besoin de l'instruction return. Ruby renvoie toujours la dernière valeur. Il suffit de mettre la valeur là par elle-même. Et dans Ruby, la pratique standard est d'écrire vos variables comme new_question, pas newQuestion.

+0

Oui, je l'ai commencé juste après ma ligne Print-content, ce n'est pas dans l'exemple ci-dessus. J'ai remarqué que mon professeur écrit les variables comme ça, y a-t-il une raison? – Levi

+0

Quelle ligne de contenu d'impression? Vous voulez dire après les puts? Si oui, cela ne fonctionnera bien sûr pas. Écrire des variables de cette façon fonctionnera, cela va à l'encontre de la convention Ruby. Si vous incluez les parties manquantes de votre code, vous aurez plus de chances d'obtenir une meilleure réponse. – user37011

+0

qu'est-ce que vous obtenez pour answerArray [randomNum.to_i]? – user37011

0

Il y a un certain nombre de choses dans votre code qui semblent assez irrégulières. Décrire les questions et les réponses dans deux tableaux séparés est un problème, peu importe comment vous le découpez. Le mieux est de les définir dans un tableau simple et cohérent de tableaux, puis de choisir l'un de ces éléments en utilisant la méthode Array # rand intégrée qui en sélectionne un au hasard.

Par exemple


    class RandomFact 
    QUESTIONS = [ 
     [ 'How many nuts can a squirrel eat?', '2' ], 
     [ 'What is my favorite color?', 'blue' ] 
    ] 

    def self.rand 
     QUESTIONS.rand 
    end 
    end 

    (question, answer) = RandomFact.rand 

    puts "Question: #{question}" 
    puts "Answer: #{answer}" 

+0

De quelle version de Ruby parlez-vous? Ni Ruby 1.8.6, ni 1.8.7, ni 1.9.1 n'a de tableau # rand. Ruby 1.9.1 a un exemple de tableau #, qui fait ce que vous voulez, mais pas de tableau # rand. –

+0

Cela doit être l'une de ces extensions de base de Rails que j'ai oublié faisait partie de ce paquet. Merci pour la clarification. – tadman

Questions connexes