0

これは私の最初の投稿ですが、他の投稿を読むことで、数え切れないほどの問題を解決することができました。あなたたちは素晴らしいです。この時点までに提供してくださったすべての支援に感謝します。また、ここで私に提供できるアドバイスを事前に感謝します。

そのため、配列内のリストからランダムに数字を選択するこのスクリプトに取り組んでいます。このセクションでやろうとしているのは、 の 3 番目の次元の各要素の数値を読み取り、NumberHistoryArray2 番目の次元から対応する数値を 3 番目に示された回数だけnumberDump配列に書き込むことです。また、それが機能することを確認し、他の問題に遭遇して出力が何であるかを知る必要がある場合に参照できるようにするために、テキストファイルに書き込んでいます。

編集 NumberHistoryArray の 2 番目の次元には、1 ~ 35 の数値が含まれます。3 番目の次元には、numberDump 配列に書き込まれるときに、2 番目の次元の各数値が繰り返される回数が含まれます。

たとえば、NumberHistoryArray(4, 0, 0) が 4 の場合、numberDump(0, 0, 0) から (0, 0, 3) までに 1 回ずつ、数値 1 を 4 回書き込み、numberDump() のサイズを次のように動的に変更する必要があります。 numberDump(0, 0, 0) から numberDump(0, 0, 3) をエコーし​​た結果は 1 1 1 1 になります。 NumberHistoryArray(4, 1, 1) が 7 の場合、 numberDump(1, 1, 0) で number 2 を 7 回。
編集

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 にはLower bound0 から 2 までの 3 つの要素があります。ループ内で参照しArrayOne(1)て 2 番目の要素を取得できます。

インデックスを使用して要素を参照する以外に、debug modeonimmediate windowまたはの実行中に配列要素を表示することもできますwatch window

したがって、これらのヒントを確認する際には、さらに検証するために適切な完全なコードを提示してください。

于 2013-01-05T17:17:42.007 に答える
0

ここでの問題は、各反復で の 3 次元のサイズを変更し、 のnumberDump各反復xで の値をリセットしていることです。たとえば、が 0 の場合、ループの終わりまでに 10 に等しくなる場合があります。ただし、次の反復では、が 1 の場合は0 にリセットされ、最終的に の 3 番目の次元が 0 にサイズ変更され、ほとんどが消去されます。既存の要素。xnnDoxnxnumberDump

これを回避するには、次の 2 つの方法があります。

  1. xすべての反復での最大値を追跡しますn。その値を使用してnumberDump、必要に応じてサイズを変更します。

  2. ジャグ配列 (別名、配列の配列) を使用します。この場合、numberDump値が繰り返される値を含む配列である 2 次元配列になります。これにより、3 番目の次元が常に同じ長さである 3 次元配列とは対照的に、各値が異なる長さを持つことができます。

于 2013-01-06T00:14:19.057 に答える