我的目标是创建一个数组,其中包含一组骰子上每个2个数字组合的总和。我正在创建一个循环的开头,在通过die1[0]
之前将die2[0..5]
添加到die1[1] + die2[0..5]
,依此类推。
我在下面有这个代码而且我做错了。我希望能够在数组中调用特定的数字,例如dieSums[4]
,并获得一个数字。知道我在这里做错了吗?
die1 = [1,2,3,4,5,6]
die2 = [1,2,3,4,5,6]
dieSums = []
count = 0
while count <= 5 do
dieSums << die1[0] + die2[count]
count += 1
puts dieSums[5]
end
答案 0 :(得分:4)
正如你所写的那样,while
循环不是非常Rubyonic。 (Rubinic?)迭代数组元素的更惯用的方法:
#!/usr/bin/ruby
die1 = [1,2,3,4,5,6]
die2 = [1,2,3,4,5,6]
dieSums = []
die1.each do |d1|
die2.each do |d2|
dieSums << d1 + d2
end
end
puts dieSums[5]
当然,die1
和die2
在这种情况下是相同的,因此您可以将die2
替换为die1
,这样就可以解决问题。
答案 1 :(得分:3)
您正在循环中调用puts dieSums[5]
。 dieSums[5]
直到最后一次迭代才会存在。如果你在循环之外调用它,它将起作用:
die1 = [1,2,3,4,5,6]
die2 = [1,2,3,4,5,6]
dieSums = []
count = 0
while count <= 5 do
dieSums << die1[0] + die2[count]
count += 1
end
puts dieSums[5] #=> 7
答案 2 :(得分:2)
作为旁注:请注意,您的问题过于复杂(因为您以命令性的方式思考,请查看Functional programming)。两个骰子的所有可能值的总和:
>> die = [1,2,3,4,5,6]
>> die.product(die).map { |v1, v2| v1 + v2 }
=> [2, 3, 4, 5, 6, 7, 3, 4, 5, 6, 7, 8, 4, 5, 6, 7, 8, 9, 5, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 11, 7, 8, 9, 10, 11, 12]
uniq
。 repeated_combination(2)
代替product
。 die.product(die)
= die.repeated_permutation(2)
)找到N骰子的所有总和几乎一样简单:
>> die.repeated_permutation(5).map { |values| values.inject(:+) }