
Dim i As Integer:Dim i2 As Integer:Dim card(5) As Integer:Dim expectPoint0card(1) As Integer '0枚のカードを交換する場合のすべての選択肢の期待値
Dim expectPoint1card(5) As Integer
Sub porkerGame()
card(1) = 1: card(2) = 2: card(3) = 3: card(4) = 4: card(5) = 5
getExpectPoint1card expectPoint1card
End Sub
Sub getExpectPoint1card(expectPoint1card() As Integer)
Dim tesu1 As Integer:Dim sum1 As Integer
For i = 1 To 5
getTesuSum1 i, tesu1, sum1
expectPoint1card(i) = sum1 / tesu1
Next i
End Sub
Sub getTesuSum1(rowNumber As Integer, tesu1 As Integer, sum1 As Integer)
Dim card2(5) As Integer:tesu1 = 0:sum1 = 0
MsgBox rowNumber
copy card, card2, 5
MsgBox rowNumber
For i = 4 To 55
MsgBox rowNumber
card2(rowNumber) = i
addTesuSum card2, tesu1, sum1
Next i
End Sub
Sub copy(row() As Integer, row2() As Integer, i2 As Integer)
For i = 1 To i2
row2(i) = row(i)
Next i
End Sub
上記のプログラムで、ウィンドウに1,6,4,5,6と表示され、その次には、エラーが表示します。僕は、ウィンドウに表示される変数RowNumberの値がしばらくの間は1のままであるようにプログラムを書いたつもりなのですが、変数rowNumberの値が変わるのは、どうしてでしょうか?教えてください。お願いします。
No.2ベストアンサー
- 回答日時:
補足しますと、rowNumber は 元々 i を「参照渡し」してますので、i の変化に合わせて変化してます。
i = 1 で getTesuSum1 に渡され、MsgBox 1
更に copy に渡され i = 5 まで実行され、i = 6 で For を抜けて copy から戻った時に MsgBox 6
更に 次の For で i = 4 になり、MsgBox 4
次に For 内でインクリメントされて MsgBox 5
次に For 内でインクリメントされて MsgBox 6
そして card2(5) に 6 は入らずオーバーフロー
引数の規定は参照渡し(ByRef)なので 値渡し(ByVal) にするのも手です。
Sub getTesuSum1(ByVal rowNumber As Integer, tesu1 As Integer, sum1 As Integer)
いずれにしても、同じ変数を ローカル以外で宣言して使うのは必要範囲に留めましょう。
なるほど。rowNumberの値がiと等しいようになっているから、このようなことがおこるのですね。これで、わかりました。どうもありがとうございました。
No.3
- 回答日時:
Sub addTesuSum
は、どのようなコードなのでしょうか?
>MsgBox rowNumber
は、Debug.Print か、ウォッチ式の変わりですか?
それ自体に、意味があるとは思えませんが。
この回答への補足
このプログラムはポーカーゲームのプログラムを作っていて、うまくいかないところがあったので、そのままそのプログラムを書き込もうとすると800字以上で書き込めなかったために、質問に必要なところ以外を削除したものですが、いらないところが残っていたようです。
補足日時:2005/04/17 17:37No.1
- 回答日時:
VBは解りませんが、、、
Dim i As Integer を
Sub getExpectPoint1card(expectPoint1card() As Integer)
Sub getTesuSum1(rowNumber As Integer, tesu1 As Integer, sum1 As Integer)
Sub copy(row() As Integer, row2() As Integer, i2 As Integer)
などでバラバラに使うなら、Sub 内で宣言しないとダメなのでは?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
[VBA]選択範囲の下から上に処理...
-
5
vbscriptを使いexcelを参照して...
-
6
VB.NETでコンボボックスの1行目...
-
7
ユーザーフォームのテキストボ...
-
8
VBAでWEB上の入力項目に値をい...
-
9
[VB.net] DataGridViewのコンボ...
-
10
範囲が指定されている乱数について
-
11
チェックした値を取得したい(C...
-
12
VB2010にて、Log関数の値が違う...
-
13
ListBoxでオートフィルター表示
-
14
PL/SQLでのTO_DATEの時間取得に...
-
15
C# get set
-
16
Powershellのparamについて
-
17
変数名の取得
-
18
C#の質問です
-
19
一番後ろのスラッシュ以降を削...
-
20
VBでBtrieveファイルにアクセス...
おすすめ情報
公式facebook
公式twitter