所以我正在为我的班级做一个小而简单的项目,由于某种原因,我无法使用变量访问值。
这是我的班级:(我遇到了getAnswer方法的问题,特别是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
这是我上课的课程:
randomNum = cgi['randomNum']
answer = cgi['answer']
puts newQuestion.getAnswer(randomNum,answer)
现在的问题是randomNum保存了以前表单中的值。如果我打印出randomNum就在我从表格中拉出值的地方我得到它。
如果我打印出方法中的randomNum getAnswer我得到它。
如果我打印出answerArray [0]我得到一个值。
如果我打印出answerArray [randomNum]我什么都没得到。
它几乎是上面的getQuestion方法的精确副本,并且可以使用。有什么输入吗?
答案 0 :(得分:1)
随机数可能是来自CGI的字符串。使用randomNum.to_i将其转换为整数,您将被设置。
答案 1 :(得分:0)
一定是你的输入。当我在irb中尝试它时,它对我有用。
>> new_q = RandomFact.new
=> #<RandomFact:0x41028e74 @randomNum=2>
>> new_q.getQuestion
Three
=> 2
>> new_q.getAnswer(2, "")
=> "three"
答案 2 :(得分:0)
我不确定你在这里尝试做什么,但如果你真的只是想做你的例子所展示的,那么你就不需要创建类和函数了。一系列问题和答案都会很有效。
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
答案 3 :(得分:0)
你是否在某处初始化newQuestion?在你给出的例子中,它将是零。
一些不相关的问题花絮:你不需要return语句。 Ruby总是返回最后一个值。只需将价值放在那里。在Ruby中,标准做法是将变量写为new_question,而不是newQuestion。
答案 4 :(得分:0)
你的代码中有很多东西看起来很不规则。
无论您如何切片,在两个单独的阵列中描述问题和答案都是麻烦。更好的方法是在一个简单,一致的数组中定义它们,然后使用内置的Array#rand方法选择其中一个元素,它将随机选择其中一个。
例如
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}"