2012-04-27 36 views
2

關於變量變化的問題,我有以下代碼...在Ruby中

@organisims.each do |organisim| 

    randomvalue = rand(10) 
    prediction = organisim.predict 

    if prediction == randomvalue 
    organisim.resources += 1 
    end 
    if prediction != randomvalue 
    organisim.resources -= 1 
    end 
end 

我想如果它使預測的隨機生成的數字相匹配,以改變「生物有害的資源。它似乎工作正常,如果不匹配則返回-1,如果匹配則返回+1。

的問題是,當我遍歷這個陣列(生物有害的),以處理它們的資源,我收到重複在我的輸出,如

循環100個 平均resouces:1500

週期101 平均resouces:1500

再說,

週期102個 平均resouces:1400

週期103個 平均resouces:1400

這是我的代碼(我看到它沒有問題),或者與紅寶石使用psudorandom數發生器的問題嗎?

乾杯一如既往 馬丁

回答

0

我想這可能是你的蓄電池的範圍的問題考慮這個例子。

# example Organism class 
class Organisim 

    attr_accessor :predict, :resources, :prediction 

    def initialize 
    @resources = 0 
    end 

    def predict 
    @prediction = rand(10) 
    @prediction 
    end 

end 

# initialize @organisims 
@organisims = [] 

100.times do 
    @organisims << Organisim.new 
end 

puts "!!!! Starting Organisim Specific Run" 
# iterate over array tracking organisim's resource 
@organisims.each_with_index do |org, i| 
    # parrallel assignment 
    r, p = rand(10), org.predict 
    #ruby ternery operator 
    (p == r) ? org.resources += 1 : org.resources -= 1 
    puts "Run #{i} Prediction: #{org.prediction} Instance Resources: #{org.resources} Overall Resources: n/a" 
end 

puts "!!!! Cumulative Resource Run" 
# resources scoped outside the iteration loop as accumulator 
overall_resources = 0 

# re-initialize @organisims 
@organisims = [] 

100.times do 
    @organisims << Organisim.new 
end 

@organisims.each_with_index do |org, i| 
    # parrallel assignment 
    r, p = rand(10), org.predict 
    #ruby ternery operator 
    #track class level resource 
    (p == r) ? org.resources += 1 : org.resources -= 1 

    #iterate accumulator 
    (p == r) ? overall_resources += 1 : overall_resources -= 1 
    puts "Run #{i} Prediction: #{org.prediction} Instance Resources: #{org.resources} Overall Resources: #{overall_resources}" 
end 

第一次迭代循環就好(我認爲),你在你的問題有一個,但你改變organisim對象實例中的資源。

第二次迭代你的累加器超出了迭代的範圍,所以它隨着對象的作用而增長和縮小。 :-)