我正在研究Ruby程序,我在创建wordsearch拼图。我有10x10双数组“arr
”并且我使用一种方法来找到一个随机的起始位置(例如:arr[5][9]
),然后我选择了一个方向,但是我遇到了超出界限的问题。
示例:需要放入拼图的其中一个词是“dog”。我得到起始位置arr[5][9]
并遍历“dog”,一次一个字母地将它放在数组中。所以arr[5][9]
是“d”,arr[5][10]
是“o”,但是当它尝试放置“g”时我的程序崩溃,我收到错误“no method [] for nil: nil class (no method error)
”。我知道这是因为它超出界限,但我怎么能阻止它这样做呢?谢谢
编辑:如果单词不适合,我希望我的程序选择一个新的起始位置,直到该单词适合。我也想阻止它走出界限
答案 0 :(得分:1)
如果你有一个10 x 10数组,那么所有索引应该在0到9之间。你需要保证这个单词不会超出任何维度中数组的界限。
例如,如果你有一个单词 dog ,那么起始索引必须介于0和7之间。
这是一个可以用于此的方法,其中有一些示例:
2.3.0 :001 > def random_x_value(word)
2.3.0 :002?> rand(10 - word.length)
2.3.0 :003?> end
=> :random_x_value
2.3.0 :004 > 16.times { print "#{random_x_value('dog')} "}; puts
4 1 5 1 5 6 3 0 4 5 4 5 2 3 3 5
=> nil
[我之前使用过(0..(10-word.length)).to_a.sample
,但后来意识到我可以使用更简单,更清晰的rand(10 - word.length)
。]
答案 1 :(得分:0)
def random_position(nrows, ncols, word)
c = ncols - word.size
rand(nrows * c).divmod(c)
end
20.times { p random_position(10, 10, 'dog') }
[5, 6]
[4, 4]
[9, 4]
[1, 6]
[8, 1]
[8, 6]
[5, 6]
[1, 6]
[1, 1]
[3, 0]
[5, 3]
[1, 5]
[6, 3]
[4, 2]
[1, 5]
[1, 3]
[4, 1]
[7, 2]
[1, 2]
[7, 1]