我在下面的代码中遇到了一些问题。这很简单,但对我来说最尴尬的是它确实有效。
这里我们有一个程序可以在先前输入的数组中随机播放项目,并将其打印到屏幕上。就是这样。
现在,为什么我这么奇怪?
全部归结为count
变量,y
变量和while loop
。
我一步一步地向自己解释这段代码,但我不知道这个程序如何分析数组中的最后一项,以及所有由于
while y <= count
x = rand(count+1)
if array[x] != 'used'
randomized.push array[x]
array [x] = 'used'
y = y + 1
end
我只是不明白。如果我创建一个包含三个项目的数组
array = ["a","b","c"]
然后变量count
等于1
。并且y
变量在开头的最开始和结尾处等于0
,我们将y
增加1
。这个while loop
应该只重复两次,就像条件while y <= count
一样,为什么?
首先我们的y
是0
,而且它的数量小于1
。所以我们先来了
走过我们的循环。
现在是时候进行第二次循环,y = 1
,count = 1
,它们是平等的,我们走了。
现在它正在进行第三次演练。同时y = 2
和count = 1
。
有人能解释我怎么可能?
# starting condition
list = [ ]
# as the question
puts 'Enter a list of words, press \'enter\' to quit and they will be returned
randomly shuffled.'
word = 'one'
# get the words in the first list
while word != ''
word = gets.chomp
list.push word
end
# define shuffle method
def shuffle array
# starting conditions of local variables
randomized = [ ]
count = -2
x = 0
y = 0
array.each do |word|
count = count + 1
end
while y <= count
x = rand(count+1)
if array[x] != 'used'
randomized.push array[x]
array [x] = 'used'
y = y + 1
end
end
puts randomized
end
shuffle list
答案 0 :(得分:0)
array = ["a","b","c"]
计数为1是正确的。
但是,当你这样做时:
while word != ''
word = gets.chomp
list.push word
end
你真的得到array = ["a","b","c",""]
。因此,计数实际上是2。
这不会导致以后出现问题,因为行x = rand(count+1)
确保永远不会选择最后一个元素。