0

这是我在这里的第一篇文章,但阅读其他文章帮助我解决了无数问题。你们真棒。因此,感谢你们到目前为止提供的所有帮助,并提前感谢您在这里给我的任何建议。

所以,我正在研究这个脚本,它最终会从数组中的列表中随机选择数字。我在本节中尝试做的是读取第三维的每个元素中的NumberHistoryArray数字,并将第二维中的相应数字写入numberDump数组中第三维中指示的次数。我也让它写入一个文本文件,只是为了看看它是否有效,并且如果我遇到其他问题并且需要知道输出是什么,可以参考一些东西。

编辑 NumberHistoryArray 的第二维包含数字 1 到 35。第三维包含第二维中每个数字在写入 numberDump 数组时应重复的次数。

例如,如果 NumberHistoryArray(4, 0, 0) 为 4,则应将数字 1 写入四次,在 numberDump(0, 0, 0) 到 (0, 0, 3) 中各写入一次,并动态调整 numberDump() 的大小为需要适合每个 1。通过 numberDump(0, 0, 3) 回显 numberDump(0, 0, 0) 的结果应该是 1 1 1 1。如果 NumberHistoryArray(4, 1, 1) 是 7,它应该写在 numberDump(1, 1, 0) 中数字 2 七次。
编辑

从 Do 循环中写入 numberDump 文本文件时,该文本文件是完美的。如果我从 Do 循环内部回显数组中每个元素的内容,则内容是准确的。一旦在 Do 循环之外,内容是空白的。有接盘侠吗?

Dim NumberHistoryArray(5, 34, 3)
Dim numberDump()
reDim numberDump(3, 34, 0)

' generate the number list and store it in the array
For n = LBound(numberDump, 1) to UBound(numberDump, 1)
  i = 1
  x = 0
  y = 1

  Do
    Set objTextFile = objFSO.OpenTextFile("numberDump.txt", 8, True)

    ' determine how many elements are needed in the third dimension of the
    ' array to store the output
    x = x + NumberHistoryArray(4, i - 1, n)

    ' resize the array
    ReDim Preserve numberDump(3, 34, x)

    ' input the numbers
    For z = y to UBound(NumberDump, 3)
      numberDump(n, i - 1, z) = i
      objTextFile.WriteLine(numberDump(n, i - 1, z))
    Next

    objTextFile.Close

    y = x + 1
    i = i + 1
  Loop Until i = 36
Next

For i = 0 to UBound(numberDump, 2)
For j = 0 to UBound(numberDump, 3)
    wscript.Echo numberDump(0, i, j)
Next
Next
4

2 回答 2

0

听说过物体的寿命吗?您在哪里初始化对象:在循环内或循环外,以便可以在整个sub routine/中引用它function

你怎么指Array elements外面的loop?每个element都有一个index. 所以你的元素是通过index.

例如,ArrayOne 有 3 个元素,从Lower bound0 到 2。在您的循环中,您可以参考ArrayOne(1)获取第二个元素。

除了使用索引来引用元素之外,您还可以尝试在debug modeonimmediate windowwatch window.

因此,当您检查这些提示时,请向我们展示正确的完整代码以进行进一步验证。

于 2013-01-05T17:17:42.007 回答
0

这里的问题是您正在调整每次迭代的第三维大小numberDump,并且每次x迭代都会重置 的值。例如,when为 0,在循环结束时,可能等于 10。但是,在下一次迭代中,when为 1,重置为 0,最终将第三维的大小调整为 0,擦除大部分现有的元素。xnnDoxnxnumberDump

有两种解决方法:

  1. x跟踪的所有迭代的最大值n。根据需要使用该值调整大小numberDump

  2. 使用锯齿状数组(又名数组数组)。在这种情况下,numberDump将是一个二维数组,其值是包含重复值的数组。这将允许每个值具有不同的长度,而不是三维数组,其中第三维始终具有相同的长度。

于 2013-01-06T00:14:19.057 回答