【问题标题】:Randomizing specific position of numbers随机化数字的特定位置
【发布时间】:2018-05-28 23:37:18
【问题描述】:

例如,我有数字 1,9,7,4,我想随机化它们的位置,所以我会得到 9,1,4,7 或 7,1,9,4 等。你知道怎么做吗?谢谢

【问题讨论】:

  • 有很多方法可以做到这一点。最好的方法取决于您打算如何处理结果。
  • 这也取决于您使用的基本方言。
  • 三个不同的人,可能都是专业人士,为你回答了你的作业。您至少可以将三个正确答案之一标记为已接受的答案。你也可以感谢他们。

标签: excel vba basic


【解决方案1】:

这是一个基本的 vba 随机化成字典对象。

Dim vals As Variant, ord As Object

Set ord = CreateObject("scripting.dictionary")

vals = Array(1, 4, 7, 9)

Do While ord.Count < (UBound(vals) + 1)
    ord.Item(vals(Application.RandBetween(LBound(vals), UBound(vals)))) = vbNullString
Loop

Debug.Print Join(ord.keys, ", ")

【讨论】:

    【解决方案2】:

    这是一个更可能(简单化)的例子:(我希望我没有为你做作业)

    Sub sub1()
      Dim i1&, i2&, iswap&, a4 As Variant
      a4 = Array(1, 9, 7, 4)
      For i1 = 0 To 3
        i2 = Int(Rnd() * 4) ' random integer 0 to 3
        iswap = a4(i1) ' swap(a4(i1), a4(i2))
        a4(i1) = a4(i2)
        a4(i2) = iswap
      Next i1
      Debug.Print a4(0); a4(1); a4(2); a4(3) ' Ctl-G to view, F7 to get back to code
    End Sub
    

    【讨论】:

      【解决方案3】:

      您没有指定基本方言,所以这里有一些代码:

      a(1) = 1 : a(2) = 4 : a(3) = 7 : a(4) = 9
      FOR l = 1 TO 4
          SWAP a(l), a(INT(RND * 4 + 1))
      NEXT
      END
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-09-30
        • 2018-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-07
        • 2019-09-25
        相关资源
        最近更新 更多