首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在循环中更改随机数数组中的值

在循环中更改随机数数组中的值
EN

Stack Overflow用户
提问于 2017-08-11 02:05:43
回答 2查看 76关注 0票数 0

我试图创建一个循环,当随机数与输入的相同索引相匹配时,值就会发生变化,并对后面的每个循环保持不变。

代码语言:javascript
复制
input = gets.chomp
tries_left = 12
while(tries_left > 0)
tries_left -= 1
computer = 4.times.map do rand(0..6) end.join

  if computer[0] == input[0]
    computer[0] = input[0]
 end
end

在上面的代码中,在第一个循环之后,存储到输入重置的值。

代码语言:javascript
复制
computer = 4.times.map do rand(0..6) end.join
 input = gets.chomp
  tries_left = 12
    while(tries_left > 0)
    tries_left -= 1

      if computer[0] == input[0]
        computer[0] = input[0]
     end

如果我像这样把计算机从循环中取出来,那么每次都会产生相同的随机数。再次,我需要它产生新的数字,每次除了什么已经匹配。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-11 07:16:27

如果将computer设置为字符串数组,则可以对其进行freeze以防止对其进行进一步修改,然后在与索引不匹配时对计算机中的内容进行replace

代码语言:javascript
复制
input = gets.chomp
tries_left = 12

computer = Array.new(4) { '' }
# setting the srand to 1234, the next 48 calls to 'rand(0..6)' will always
# result in the following sequence:
# 3, 6, 5, 4, 4, 0, 1, 1, 1, 2, 6, 3, 6, 4, 4, 2, 6, 2, 0, 0, 4, 5, 0, 1,
# 6, 6, 2, 0, 3, 4, 5, 2, 6, 2, 3, 3, 0, 1, 3, 0, 3, 2, 3, 4, 1, 3, 3, 3
# this is useful for testing things are working correctly,
# but take it out for 'live' code
srand 1234
while tries_left > 0
  # no need to keep iterating if we've generated all the correct values
  if computer.all?(&:frozen?)
    puts "won #{computer.inspect} in #{12 - tries_left} tries"
    break
  end

  tries_left -= 1
  computer.each.with_index do |random, index|
    # generate a new random number here unless they guessed correctly previously
    random.replace(rand(0..6).to_s) unless random.frozen?

    # if they've guessed the new random number, mark the string so they we
    # don't update it
    random.freeze if random == input[index]
  end

  puts "#{computer.inspect} has #{computer.count(&:frozen?)} correct numbers"
end

然后当您运行脚本时:

代码语言:javascript
复制
$ echo 3654 | ruby example.rb 
# ["3", "6", "5", "4"] has 4 correct numbers
# won ["3", "6", "5", "4"] in 1 tries
$ echo 3644 | ruby example.rb 
# ["3", "6", "5", "4"] has 3 correct numbers
# ["3", "6", "4", "4"] has 4 correct numbers
# won ["3", "6", "4", "4"] in 2 tries
$ echo 3555 | ruby example.rb 
# ["3", "6", "5", "4"] has 2 correct numbers
# ["3", "4", "5", "0"] has 2 correct numbers
# ["3", "1", "5", "1"] has 2 correct numbers
# ["3", "1", "5", "2"] has 2 correct numbers
# ["3", "6", "5", "3"] has 2 correct numbers
# ["3", "6", "5", "4"] has 2 correct numbers
# ["3", "4", "5", "2"] has 2 correct numbers
# ["3", "6", "5", "2"] has 2 correct numbers
# ["3", "0", "5", "0"] has 2 correct numbers
# ["3", "4", "5", "5"] has 3 correct numbers
# ["3", "0", "5", "5"] has 3 correct numbers
# ["3", "1", "5", "5"] has 3 correct numbers
票数 1
EN

Stack Overflow用户

发布于 2017-08-11 05:39:26

还不太清楚你想要实现什么,但以下是:

代码语言:javascript
复制
if computer[0] == input[0]
  computer[0] = input[0]
end

很明显是个笨蛋。没有任何更新,因为computer[0],无论是什么,都被设置为与以前相同的值。我相信您希望在数组中以某种方式使用索引:

代码语言:javascript
复制
4.times.map do |index|
  value = rand(0..6)
  # somehow check the similarity, e.g.:
  if input[index] == value
    # do something
  end
end

请原谅这个非常含糊的回答,但是很难理解你想要达到的目标。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45625857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档